我创建了一个列表列表,并希望将项目追加到各个列表中,但是当我尝试追加到列表之一(a[0].append(2))时,该项目就会添加到所有列表中。
a[0].append(2)
a = [] b = [1] a.append(b) a.append(b) a[0].append(2) a[1].append(3) print(a)
给出: [[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
我希望: [[1, 2], [1, 3]]
[[1, 2], [1, 3]]
更改构造列表初始列表的方式,制作b一个浮动列表而不是列表,然后将方括号放在中.append(),可以得到所需的输出:
b
.append()
a = [] b = 1 a.append([b]) a.append([b]) a[0].append(2) a[1].append(3) print(a)
给出: [[1, 2], [1, 3]]
但为什么?结果不一样是不直观的。我知道这与对同一列表的多个引用有关,但是我看不到在哪里发生。
这是因为该列表包含对对象的引用。您的清单不包含[[1 2 3] [1 2 3]],而是[<reference to b> <reference to b>]。
[[1 2 3] [1 2 3]]
[<reference to b> <reference to b>]
更改对象时(通过向追加内容b),您更改的是对象本身,而不是包含对象的列表。
为了获得想要的效果,您的列表a必须包含的副本,b而不是的引用b。要复制列表,您可以使用range [:]。例如, :
a
[:]
>>> a=[] >>> b=[1] >>> a.append(b[:]) >>> a.append(b[:]) >>> a[0].append(2) >>> a[1].append(3) >>> print a [[1, 2], [1, 3]]