将列表追加到列表中,覆盖值

时间:2012-11-23 12:18:02

标签: python list append overwrite

我想追加list1,另一个list2,所以修改list2,另一次追加到list1,但list1的值是覆盖的。

我将[:]与附加一起使用并且正常工作:

list1=[1,2]
list2=[]

list2.append(list1[:])

list1[0]=20

print list1, list2 # [20, 2] [[1, 2]]

但问题是当列表中有另一个列表

list1=[[2,1],[2]] 
list2=[]

list2.append(list1[:])

print list1, list2  #[[2, 1], [2]] [[[2, 1], [2]]]

list1[0][0]=25

list2.append(list1)

print list1, list2  #[[25, 1], [2]] [[[**25**, 1], [2]], [[25, 1], [2]]]

我希望最后一次打印是[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]

2 个答案:

答案 0 :(得分:3)

我认为你问的是:

from copy import deepcopy
list1.append(deepcopy(list2))

答案 1 :(得分:0)

我建议您创建一个新对象,其内容与 list1 指向的列表完全相同,并使 lisT1 指向此副本。这样,如果您修改 list1 (或 list1 指向的内容), lisT1 (或 lisT1 指向的内容) )将保持不变。 例如:

>>> list1=[[2,1],[2]]
>>> list2=[]
>>> lisT1 = [[2,1],[2]]
>>> list2.append(lisT1[:])
>>> print (list1, list2)
[[2, 1], [2]] [[[2, 1], [2]]]
>>> list1[0][0]=25
>>> list2.append(list1)
>>> print (list1, list2)
[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]