将元素追加到列表列表中会覆盖整个列表

时间:2019-06-21 06:34:45

标签: python

代码如下所示:

s = [[]] *4
s[0].append(1)

print(s)

它给了我输出:

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

但是我想要这样的输出:

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

我该如何实现?

2 个答案:

答案 0 :(得分:6)

您不能使用['a', 'b', 'c']创建四个列表。在这种情况下,您仅创建一个列表和指向该列表的四个引用。

因此,您应该使用[[]] * 4

答案 1 :(得分:1)

Sraw的回复中只是一个附加信息:

>>> t = [[]] * 4 
>>> t
[[], [], [], []]
>>> id(t[0]) == id(t[1]) == id(t[2]) == id(t[3])
True
>>> l = [[], []]
>>> id(l[0]) == id(l[1])
False

您对同一列表有4个引用。这就是为什么在其他任何引用中添加元素的原因。