函数追加在python 3中[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我想知道为什么追加为我列表中的每个列表添加一个数字。不仅是我选择的那个([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)
python python-3.x function
2个回答
1
投票

发生这种情况是因为您的初始列表j包含对同一对象的5个引用(因此5个副本到同一个列表)。这就是为什么你追加的每一个都列在每个列表中的原因。

相反,如果您实际创建了5个不同的子列表:

j = [[] for _ in range(5)]

然后它将按预期工作:

[[5], [4], [], [], [], 0]


1
投票

没有区别。

j = [[]] * 5

重复相同的空列表实例五次,每次索引一次。

IOW,初始空列表被引用5次。

你可以验证这个:

id(j[0]) == id(j[1])

要在每个索引处实例化不同的空列表,需要理解:

[[] for _ in range(5)]

© www.soinside.com 2019 - 2024. All rights reserved.