我有一个双数组
alist[1][1]=-1
alist2=[]
for x in xrange(10):
alist2.append(alist[x])
alist2[1][1]=15
print alist[1][1]
我得到15.很明显我传递了一个指针而不是一个实际的变量...是否有一种简单的方法来制作一个单独的双数组(没有共享指针)必须做一个双循环?
谢谢, 丹
答案 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][:])