python嵌套列表意外行为

时间:2016-02-16 00:28:53

标签: python list nested

我在python中使用嵌套列表时遇到了意外行为,需要一段时间才能调试。如果列表初始化如下:

a = [[None] * 2] * 2
a
[[None, None], [None, None]]

和另一个像这样初始化的列表:

b = [[None, None], [None, None]]
b
[[None, None], [None, None]]

我希望这两个列表都有相同的行为,但如果我这样做:

a[0][0] = 3
a
[[3, None], [3, None]]

如果我这样做:

b[0][0] = 3
b
[[3, None], [None, None]]

有人可以解释为什么会这样吗?感谢

1 个答案:

答案 0 :(得分:1)

>>> a = [[None] * 2] * 2
>>> id(a[0])
41554168
>>> id(a[1])
41554168
>>> b = [[None, None], [None, None]]
>>> id(b[0])
41549576
>>> id(b[1])
41557368

这应该解释