Python:创建数组的副本

5 投票
6 回答
13312 浏览
提问于 2025-04-15 20:28

我有一个双精度数组

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,这个方法在复制时会深入一层。

撰写回答