Python:创建一个数组的副本

Dan*_*Dan 5 python arrays pointers list

我有一个双阵列

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

print alist[1][1]
Run Code Online (Sandbox Code Playgroud)

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

谢谢,丹

msw*_*msw 9

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


sth*_*sth 6

您可以使用somelist[:](somelist[1:2]从头到尾的切片)来创建列表的(浅)副本.将此应用于for-loop可以:

alist2 = []
for x in xrange(10):
   alist2.append(alist[x][:])
Run Code Online (Sandbox Code Playgroud)

这也可以写成列表理解:

alist2 = [item[:] for item in alist]
Run Code Online (Sandbox Code Playgroud)


Mik*_*ham 4

列表的列表通常不是制作二维数组的好解决方案。您可能想要使用 numpy,它提供了一种非常有用、高效的 n 维数组类型。numpy 数组可以被复制。

通常比简单的列表列表更好的其他解决方案包括以元组作为键的字典(d[1, 1]将是 1, 1 组件)或定义您自己的二维数组类。当然,可以复制字典,并且您可以为您的班级抽象复制。

要复制列表的列表,您可以使用copy.deepcopy,复制时它将深入一层。