Python:创建一个数组的副本

时间:2010-03-16 05:34:56

标签: python list pointers arrays

我有一个双数组

alist[1][1]=-1
alist2=[]
for x in xrange(10):
    alist2.append(alist[x])
alist2[1][1]=15

print alist[1][1]

我得到15.很明显我传递了一个指针而不是一个实际的变量...是否有一种简单的方法来制作一个单独的双数组(没有共享指针)必须做一个双循环

谢谢, 丹

6 个答案:

答案 0 :(得分:9)

我认为copy.deepcopy()就是针对这种情况。

答案 1 :(得分:5)

您可以使用somelist[:](从开头到结尾的somelist[1:2]切片)来创建列表的(浅)副本。将此应用于for循环会产生:

alist2 = []
for x in xrange(10):
   alist2.append(alist[x][:])

这也可以写成列表理解:

alist2 = [item[:] for item in alist]

答案 2 :(得分:4)

列表列表通常不是制作二维数组的好方法。您可能希望使用numpy,它提供了非常有用,高效的n维数组类型。可以复制numpy数组。

通常比普通列表更好的其他解决方案包括带有元组作为键的dict(d[1, 1]将是1,1组件)或定义自己的2d数组类。当然,可以复制dicts,你可以为你的班级抽象复制。

要复制列表列表,您可以使用copy.deepcopy,复制时会有一个深度。

答案 3 :(得分:1)

在追加时制作一份清单。

  alist2.append(alist[x][:])

答案 4 :(得分:1)

如果您已经在列表中循环,那么只需按照 seanmonstar 的答案复制内部列表是最简单的。

如果您只想对列表进行深层复制,可以在其上调用copy.deepcopy()

答案 5 :(得分:0)

通常你可以这样做:

new_list = old_list[:]

所以你可以把它扔进你的单数for循环中吗?

for x in range(10):
    alist2.append(alist[x][:])