2010-03-29 63 views
19

嗨我想复制一个2D列表,这样如果我修改1个列表,另一个不会被修改。在Python中复制2D列表

对于1个d名单,我只是这样做:

a = [1,2] 
b = a[:] 

现在,如果我修改B,A不被修改。

但这并不二维表的工作:

a = [[1,2],[3,4]] 
b = a[:] 

如果我修改B,A被修改为好。

我该如何解决这个问题?

+3

一大堆,当人们用户嵌套表,需要给他们以这种方式拷贝的时候,他们真的想要使用'numpy'。 – 2010-03-29 23:23:18

回答

34

对于作品无论维数更通用的解决方案,使用copy.deepcopy()

import copy 
b = copy.deepcopy(a) 
+0

虽然在大多数情况下,我可能会说'from复制导入deepcopy'因为名称冲突不太可能,并且它看起来更好。 ;) – Amber 2010-03-29 23:18:19

+1

@Dav,你提出一个有效的观点。我更喜欢总是导入模块,以避免名称冲突,而不是逐个处理函数。 :) – 2010-03-29 23:20:59

+0

请注意,这也会深入复制列表中的实际元素。 – FogleBird 2010-03-29 23:27:54

35
b = [x[:] for x in a] 
+4

+1因为合适。我个人喜欢避免复制/深层复制(在现实生活中很少有他们的有效用例;对于超过2维的列表我们也可以这么说) – ChristopheD 2010-03-29 23:16:51