5

当我以“通用”方式定义列表时:

>>>a=[[]]*3
>>>a
[[],[],[]]

然后尝试仅附加到外部列表的第二个元素:

>>>a[1].append([0,1])
>>>a
[[[0,1]], [[0,1]], [[0,1]]]

如上所示,它附加到外部列表的所有元素,可能是因为这些元素是对同一个列表而不是不同列表的引用(为什么它会这样工作?)。我如何才能以相同的“通用”方式实际创建一个列表,以便内部列表将是不同的列表而不仅仅是引用。谢谢。

4

1 回答 1

10

你是对的,它们都是对一个列表的引用。

[[] for _ in range(3)]

是创建独立空列表列表的常用方法。您可以xrange在 Python 2.x 上使用,但如果长度实际上与您的示例中一样小,则不会有什么不同。

不知道如何解释其原因(原因是它是以这种方式实现的),但您可以看到此行为已记录在此处(至少是通过):

Operation       Result                              Notes
s * n, n * s    n shallow copies of s concatenated  (2)

这里的“浅”这个词的确切含义是:元素是通过引用复制的。链接页面上的“注 2”也回答了您的问题。

于 2013-05-13T21:40:01.757 回答