Python:创建数组的副本
我有一个双精度数组
alist[1][1]=-1
alist2=[]
for x in xrange(10):
alist2.append(alist[x])
alist2[1][1]=15
print alist[1][1]
然后我得到了15。很明显,我传递的是一个指针,而不是一个实际的变量……有没有简单的方法可以创建一个独立的双精度数组(没有共享指针)而不需要使用双重循环呢?
谢谢,
丹
6 个回答
8
你可以使用 somelist[:]
这个方式,它是一个切片,类似于 somelist[1:2]
,表示从头到尾来创建一个(浅)副本的列表。把这个用在你的循环里,就可以得到:
alist2 = []
for x in xrange(10):
alist2.append(alist[x][:])
这也可以用列表推导式来写:
alist2 = [item[:] for item in alist]
9
我觉得 copy.deepcopy() 就是用来解决这个问题的。
4
用一堆列表来做二维数组通常不是个好主意。你可能更想用numpy,它提供了一种非常有用且高效的多维数组类型。numpy数组是可以复制的。
还有一些其他的解决方案,通常比简单的列表更好,比如用字典(dict)和元组作为键(例如,d[1, 1]
就代表1, 1这个位置的值),或者自己定义一个二维数组的类。当然,字典也是可以复制的,你也可以为你的类设计一个复制的方法。
如果你想复制一个列表的列表,可以使用copy.deepcopy
,这个方法在复制时会深入一层。