我想追加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]]]
答案 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]]]