Python:列表输出列表

Python:列表输出列表,python,list,Python,List,我正试着列出5张清单 我是通过web=[]]*5 现在我想用值1和2更新“列表列表”中的第一个列表 web[0].append(1) web[0].append(2) 但我的输出是 [[1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2], [1, 2]] 但是第一个列表不应该只更新吗? 我想要的输出如下 [[1, 2], [], [], [], [], [], [], [], [], []] 这样创建列

我正试着列出5张清单

我是通过
web=[]]*5

现在我想用值1和2更新“列表列表”中的第一个列表

web[0].append(1)
web[0].append(2)
但我的输出是

[[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2],
[1, 2]]
但是第一个列表不应该只更新吗? 我想要的输出如下

[[1, 2],
[],
[],
[],
[],
[],
[],
[],
[],
[]]

这样创建列表只会创建重复项。您可以这样创建:

n = 5 #range
web = [[] for _ in range(n)]

web[0].append(1)
web[0].append(2)
print(web)
输出:

[
 [1, 2],
 [],
 [],
 [],
 []
]

创建
web=[[]]*5
时,实际上是在创建对同一对象的引用数组(一个[]的列表)。因此,当您通过一个引用更改对象时,将更改列表中的所有条目

对于初学者来说,这是一个非常常见的Python“gotcha”

请尝试以下方法:

web = [[] for x in xrange(5)]

他正在复制同一个数组,这是因为他试图初始化数组,所以任何附加到其中一个列表的内容都将附加到所有列表中,因为它们是同一个对象。你说得对。我编辑了我的答案。你能给我指一个参考资料来解释我的答案吗this@ReynardAsis签出而不是回答“common Python'gotcha'”并链接到规范页面,您可以将问题标记为重复的闭包。这减少了碎片并使站点更易于使用。