如下代码:
1 | 3 a = [[]] * |
从上面结果看,[[]] * 3
确实是创建了一个 [[], [], []]
的空列表,但是我们在赋值的时候就会出现以下出乎意料的情况:
1 | 0].append(1) a[ |
探究其原因是因为使用乘号*
复制时,只是复制了索引,即复制的n个索引都指向同一个物理地址,所以在操作其中任何一个时,都会同时修改其他内容。同理列表中多个空字典也是同样的问题。
优雅的解决这个问题(借助列表推导式):
1 | >>> a = [[] for i in range(3)] |