有人可以解释以下行为吗?
X=2*[[]]
print X
X[0].append(1)
print X
产量
[[], []]
[[1], [1]]
我希望最后一个列表为[[1], []]
。的确,以下
X=[[],[]]
print X
X[0].append(1)
print X
产量
[[], []]
[[1], []]
为什么会出现这种差异?
答案 0 :(得分:5)
您使用的乘法语法会创建内容的浅表副本。其中的每个列表元素都是对同一列表的新引用。
您提供的第二个示例实际上会生成两个不同列表的列表。
y = 2*[x]
大致相当于做
y = [x] + [x]
两个地方的x
都指向相同的列表。
>>> y = 2*[[]]
>>> y[0].append(1)
>>> y
[[1], [1]]
>>> x = []
>>> y = [x] + [x]
>>> y
[[], []]
>>> y[0].append(1)
>>> y
[[1], [1]]
要创建一个充当第二个示例的列表,请尝试
>>> y=[[] for n in range(2)]
>>> y[0].append(1)
>>> y
[[1], []]