Python:将元素附加到列表列表的元素

时间:2014-02-15 23:13:06

标签: python list append

有人可以解释以下行为吗?

X=2*[[]]
print X
X[0].append(1)
print X

产量

[[], []]
[[1], [1]]

我希望最后一个列表为[[1], []]。的确,以下

X=[[],[]]
print X
X[0].append(1)
print X

产量

[[], []]
[[1], []]

为什么会出现这种差异?

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