这个问题在这里已有答案:
我想知道为什么追加为我列表中的每个列表添加一个数字。不仅是我选择的那个([0])。写下[0]或旁边的任何其他数字之间的区别是什么?
j = [[]] * 5
j[0].append(5) # add 5 to every list on list
j[1].append(4) # what's the diffrence? [1] or [0]; it adds number to every element anyway
print (j)
j.append(0) # add 0 to the main list
print (j)
发生这种情况是因为您的初始列表j
包含对同一对象的5个引用(因此5个副本到同一个列表)。这就是为什么你追加的每一个都列在每个列表中的原因。
相反,如果您实际创建了5个不同的子列表:
j = [[] for _ in range(5)]
然后它将按预期工作:
[[5], [4], [], [], [], 0]
没有区别。
j = [[]] * 5
重复相同的空列表实例五次,每次索引一次。
IOW,初始空列表被引用5次。
你可以验证这个:
id(j[0]) == id(j[1])
要在每个索引处实例化不同的空列表,需要理解:
[[] for _ in range(5)]