在Python中克隆或复制列表有哪些选项?
在使用时new_list = my_list,每次都会对new_list更改进行任何修改my_list.为什么是这样?
我有一个列表,我创建了一个副本,以便在保持原始列表的同时进行一些操作.但是,当我设置copy_list相同时org_list,它们会变成同一个东西,如果我改变copy_list,它org_list也会变化.例如:
org_list = ['y', 'c', 'gdp', 'cap']
copy_list = org_list
copy_list.append('hum')
print(copy_list)
print(org_list)
Run Code Online (Sandbox Code Playgroud)
回报
['y', 'c', 'gdp', 'cap', 'hum']
['y', 'c', 'gdp', 'cap', 'hum']
Run Code Online (Sandbox Code Playgroud)
我不太了解实际发生的事情,但它看起来org_list实际上已经过去了,copy_list所以它们实际上是同一个东西.
有没有办法制作org_list的独立副本而不做一些笨拙的事情:
copy_list = []
for i in org_list:
copy_list.append(i)
Run Code Online (Sandbox Code Playgroud)
我这样说是因为我对其他类型的变量有同样的问题,例如pandas数据帧.
我在程序中遇到变量问题.我需要在循环评估期间保留两个或三个版本的列表.例如:
x=[0]
y=[0]
while True:
y=x
x[0]+=1
print (y,x)
input()
Run Code Online (Sandbox Code Playgroud)
当我按Enter它显示[1] [1]; [2] [2]; [3] [3]...但我需要将列表的先前状态保持在变量中:[0] [1]; [1] [2]; [2] [3] ...
代码应该是什么?
在我使用python期间,我遇到了一个阻塞问题.我有一些SomeFunction应该做一些简单的计算(并且还要对它进行排序 - 我删除那段代码以使其更清晰)在给定的整数向量上并返回新的.主要问题是,每个内部循环的结果必须成为下一个的输入,但变量k和X似乎在内存中具有相同的地址.
功能如下:
def SomeFunction(k, N):
X = range(N);
for i in range(N):
for j in range(3):
X[i] = k[i]*2;
print "X:";
print X;
print "k -> :";
print k
k = X;
print "============================";
return k;
Run Code Online (Sandbox Code Playgroud)
它产生输出:
X:
[0, 1, 2, 3, 4, 5, 6, 7]
k -> :
[0, 1, 2, 3, 4, 5, 6, 7]
============================
X:
[0, 8, 2, 3, 4, 5, 6, 7]
k -> :
[0, 8, 2, 3, 4, 5, 6, 7] … 我有如下代码,当我打印 list1 和 list2 时,它显示相同的元素,但我在将现有 list1 分配给 list2 之后添加了 9,因此它不应在 list2 中显示 9。
list1=[1,2,3,4]
list2=list1
list1.insert(4,9)
print(list1)
print(list2)
Run Code Online (Sandbox Code Playgroud)
请消除我的疑问。
如果我在Python 2.7中运行以下代码,我会为a和b打印[2.,2.,2.].为什么b与a一起变化?非常感谢!
def test_f(x):
a = np.zeros(3)
b = a
for i in range(3):
a[i] += x
print a
print b
return 0
test_f(2)
Run Code Online (Sandbox Code Playgroud)