将列表添加到另一个列表中,覆盖数值。

3
我想将list2附加到list1中,然后修改list2并再次附加到list1中,但是list1的值被覆盖了。
我使用[:]与append一起使用,效果很好:
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
问题在于列表是可变的 - 您正在更改列表的值,并且其他列表中的列表仅是指向它的指针,因此也会发生更改。 - Gareth Latty
2个回答

3

我认为你想问的是:

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

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]]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接