【问题标题】:python empty list trick [duplicate]python空列表技巧[重复]
【发布时间】:2012-03-04 11:41:08
【问题描述】:

可能重复:
Python list confusion

我有一个关于 Python 列表的小问题:

为什么会这样?

x = [[]] * 4
x[0].append('x') -> [['x'], ['x'], ['x'], ['x']]

【问题讨论】:

  • 因为您要复制同一个列表四次。而且由于在您的列表中有 4 个列表都指向相同的内存空间,如果您修改其中一个,更改将影响所有。

标签: python list


【解决方案1】:

[] 的同一个实例被复制了,所以当您附加到第一个 'x' 时,实际上是将其附加到所有实例 - 因为它们都是同一个对象!

正确的做法是每次显式创建一个新的列表实例:

x = [[] for _ in range(4)]

【讨论】:

  • 我为这个答案添加了一个可能的解决方案。希望你不介意:)
  • 明确一点:实例 [] 没有被复制。表达式[[]] * 4 创建了一个列表,其中包含对同一个 [] 实例的四个引用。
  • [[]] * 4 看起来是节省一些打字的好方法,但它通过仅创建两个真实列表和 3 个引用而在后面咬人,这并不那么明显。我曾经也这样做过,但从现在开始,我将只使用此处建议的列表理解。好吧,对于这么小的列表[[],[],[],[]] 也可以。无需使用[[]] * 4 炫耀。 :)
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多