小坑
假如我用这种方式定义嵌套列表,那么a的结果将会是什么?
a = [[0]] * 4
print(a)
a[0].append(1)
print(a)
a的第一次输出结果为:[[0], [0], [0], [0]]
但进行apped操作后,a为:[[0, 1], [0, 1], [0, 1], [0, 1]]
在我的想象中,a不应该为[[0,1], [0], [0], [0]]吗?
那么我们不妨查看一下a的各个子列表的地址
for i in range(len(a)):
print(id(a[i]))
结果为
3139295538560
3139295538560
3139295538560
3139295538560
所有的子列表指向的全是同一个地址,那么其元素必然完全相同。
解决方案
知道了列表完全重复是因为指向了同一个地址这个原因后,那么解决就简单了。
只要为子列表开辟新的地址即可。
将a列表的嵌套的写法改为
a = [[0] for i in range(4)]
for i in range(len(a)):
print(id(a[i]))
结果为
2213609238208
2213609238080
2213609237888
2213609242688
地址已经不同了
这时进行append操作,看看结果如何
a[0].append(1)
print(a)
结果为
[[0, 1], [0], [0], [0]]
已经得到了想要的结果