当我以“通用”方式定义列表时:
>>>a=[[]]*3
>>>a
[[],[],[]]
然后尝试仅附加到外部列表的第二个元素:
>>>a[1].append([0,1])
>>>a
[[[0,1]], [[0,1]], [[0,1]]]
如上所示,它附加到外部列表的所有元素,可能是因为这些元素是对同一个列表而不是不同列表的引用(为什么它会这样工作?)。我如何才能以相同的“通用”方式实际创建一个列表,以便内部列表将是不同的列表而不仅仅是引用。谢谢。
你是对的,它们都是对一个列表的引用。
[[] for _ in range(3)]
是创建独立空列表列表的常用方法。您可以xrange
在 Python 2.x 上使用,但如果长度实际上与您的示例中一样小,则不会有什么不同。
不知道如何解释其原因(原因是它是以这种方式实现的),但您可以看到此行为已记录在此处(至少是通过):
Operation Result Notes
s * n, n * s n shallow copies of s concatenated (2)
这里的“浅”这个词的确切含义是:元素是通过引用复制的。链接页面上的“注 2”也回答了您的问题。