sanyyoyo 发表于 2020-2-22 22:00:18

一个关于列表的蹊跷问题,跪求解答

代码:
list1 = [,,]
list2 = [[]]*3
list3 = [[],[],[]]

list1.append(9)
list2.append(9)
list3.append(9)

print(list1)
print(list2)
print(list3)

运行结果:
[, , ]
[, , ]
[, [], []]

为什么list2的添加元素操作会添加到所有的子列表里面啊?list2和list3的区别在哪里啊?

冬雪雪冬 发表于 2020-2-22 22:05:07

这样做出来list2 = [[]]*3,表面看也是 [[],[],[]],但内部每个[]的地址都是相同的,一个append,其他的也跟着变。
如果需要初始化多个空二维列表最好
list4 = [[] for i in range(n)]

dudaguo 发表于 2020-2-22 22:10:38

list2 = [[]]*3与list3 = [[],[],[]]显示结果虽然相同,但是要注意的是list2是通过重复操作符“ * ” 形成的,既然是重复表示 3个列表会保持相同,
所以在改变list2中的任意一个列表,则三个列表都会随之改变

sanyyoyo 发表于 2020-2-22 22:15:15

冬雪雪冬 发表于 2020-2-22 22:05
这样做出来list2 = [[]]*3,表面看也是 [[],[],[]],但内部每个[]的地址都是相同的,一个append,其他的也跟 ...

非常感谢,这个坑隐藏得有点深,不踩不知道啊

sanyyoyo 发表于 2020-2-22 22:55:37

dudaguo 发表于 2020-2-22 22:10
list2 = [[]]*3与list3 = [[],[],[]]显示结果虽然相同,但是要注意的是list2是通过重复操作符“ * ” 形 ...

谢谢了,因为在编函数,空的嵌套列表要用参数来设定,所以踩到这个坑了
页: [1]
查看完整版本: 一个关于列表的蹊跷问题,跪求解答