lit*_*urt 11 python list append
我创建了一个列表列表,并希望将项目附加到各个列表,但是当我尝试附加到其中一个列表(a[0].append(2))时,该项目将添加到所有列表中.
a = []
b = [1]
a.append(b)
a.append(b)
a[0].append(2)
a[1].append(3)
print(a)
Run Code Online (Sandbox Code Playgroud)
得到: [[1, 2, 3], [1, 2, 3]]
我希望: [[1, 2], [1, 3]]
改变我构造列表的初始列表的方式,制作b浮点而不是列表并将括号放在里面.append(),给出了我想要的输出:
a = []
b = 1
a.append([b])
a.append([b])
a[0].append(2)
a[1].append(3)
print(a)
Run Code Online (Sandbox Code Playgroud)
得到: [[1, 2], [1, 3]]
但为什么?结果应该不同是不直观的.我知道这与多个对同一列表的引用有关,但我不知道发生了什么.
Bry*_*ley 23
这是因为列表包含对象的引用.你的清单不包含[[1 2 3] [1 2 3]],它是[<reference to b> <reference to b>].
当您更改对象(通过附加内容b)时,您正在更改对象本身,而不是包含该对象的列表.
为了获得您想要的效果,您的列表a必须包含副本b而不是引用b.要复制列表,您可以使用该范围[:].例如, :
>>> a=[]
>>> b=[1]
>>> a.append(b[:])
>>> a.append(b[:])
>>> a[0].append(2)
>>> a[1].append(3)
>>> print a
[[1, 2], [1, 3]]
Run Code Online (Sandbox Code Playgroud)