【问题标题】:python nested list unexpected behaviour [duplicate]python嵌套列表意外行为[重复]
【发布时间】:2016-02-16 00:28:52
【问题描述】:

我在 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]]

有人可以解释发生这种情况的原因吗?谢谢

【问题讨论】:

  • 它不如调试器好,但有时将您的代码放入pythontutor.com 之类的东西中可以帮助您了解发生了什么...

标签: python list nested


【解决方案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

这应该解释

【讨论】:

  • 我同意......但我怀疑这对 OP 来说还不够......(+1 都一样)
  • goo.gl/zJtrzY 我认为应该也能帮助他理解
  • 有没有办法让列表 a 像列表 b 一样工作?例如,如果我有 1000 多个项目的列表,最好乘以