【问题标题】:Difference between [[]]*3 and [[] for i in range(3)] [duplicate][[]]*3 和 [[] for i in range(3)] [重复]
【发布时间】:2013-12-18 22:31:49
【问题描述】:

我已经使用 Python 好几年了,但发现一件非常令人困惑的事情。

a=[[]]*3
a[0].append(3)

a=[[] for i in range(3)]
a[0].append(3)

即使类型(列表)相同,也不会产生相同的效果。 第一个产生a=[[3], [3], [3]],第二个产生a=[[3],[],[]](如预期的那样)。

有人解释一下吗?

【问题讨论】:

标签: python list


【解决方案1】:

[[]]*3 创建一个列表,其中包含三个对同一列表对象的引用

>>> lst = [[]]*3
>>> # The object ids of the lists in 'lst' are the same
>>> id(lst[0])
25130048
>>> id(lst[1])
25130048
>>> id(lst[2])
25130048
>>>

[[] for i in range(3)] 创建一个包含三个唯一列表对象的列表:

>>> lst = [[] for i in range(3)]
>>> # The object ids of the lists in 'lst' are different
>>> id(lst[0])
25131768
>>> id(lst[1])
25130008
>>> id(lst[2])
25116064
>>>

【讨论】:

  • 有道理,谢谢!
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2011-01-27
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多