在 Python 中
li = [0] * 3
li[0] = 1
# li == [1, 0, 0]
这很好用。
li = [set()] * 3
li[0].add(1)
# li == [{1}, {1}, {1}]
这将为列表中的所有内容加 1。 这两者有什么区别?
最佳答案
这里:
li = [0] * 3
li[0] = 1
您创建一个包含三个元素的列表,所有元素都是不可变数字 0。然后将第一个元素替换为不可变数字 1。
而这里:
li = [set()] * 3
li[0].add(1)
您创建一个集合(不是三个集合),并将其放入列表中三次。然后,您引用列表的第一个元素(当然是集合),并向其中添加一个数字。由于只创建了一组,因此这似乎会修改列表中的每个元素(因为它们都是相同的)。
有关 Python 中 [x] * n
危险的更多信息,请参阅:List of lists changes reflected across sublists unexpectedly
关于python-3.x - li = [0] * 10 和 li = [set()] * 10 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964884/