【问题标题】:Python: Create a duplicate of an arrayPython:创建数组的副本
【发布时间】:2011-01-27 23:34:05
【问题描述】:
我有一个双数组
alist[1][1]=-1
alist2=[]
for x in xrange(10):
alist2.append(alist[x])
alist2[1][1]=15
print alist[1][1]
我得到 15。显然我传递的是一个指针而不是一个实际的变量...有没有一种简单的方法来制作一个 单独的双数组(没有共享指针)没有必须做一个双循环?
谢谢,
丹
【问题讨论】:
标签:
python
list
pointers
arrays
【解决方案1】:
如果您已经在列表中循环,那么按照 seanmonstar 的回答,只要复制内部列表是最简单的。
如果您只想对列表进行深层复制,您可以致电copy.deepcopy()。
【解决方案3】:
您可以使用somelist[:],即从头到尾类似于somelist[1:2] 的切片,来创建列表的(浅)副本。将此应用于您的 for 循环给出:
alist2 = []
for x in xrange(10):
alist2.append(alist[x][:])
这也可以写成列表推导式:
alist2 = [item[:] for item in alist]
【解决方案4】:
列表列表通常不是制作二维数组的好方法。您可能想要使用 numpy,它提供了一种非常有用、高效的 n 维数组类型。 numpy 数组可以被复制。
通常比普通列表更好的其他解决方案包括以元组为键的字典(d[1, 1] 将是 1, 1 组件)或定义您自己的二维数组类。当然,dicts 可以被复制,你可以为你的班级抽象复制。
要复制列表列表,您可以使用copy.deepcopy,复制时会加深一层。
【解决方案5】:
追加时复制列表。
alist2.append(alist[x][:])
【解决方案6】:
通常你可以这样做:
new_list = old_list[:]
所以你也许可以把它放在你的单数 for 循环中?
for x in range(10):
alist2.append(alist[x][:])