python多维list创建(避免重复引用)
二维list生成
list_a=[[] for n in range(3)]
list_a
输出:[[], [], []]
对其中一个进行修改
list_a[1]=3
list_a
输出:[[], 3, []]
这样不会改变其它位置的元素
三维list生成
错误用法
list_a=[[] for n in range(3)]
list_b=[list_a for n in range(3)]
list_b
这样表面上输出的是正确的
[[[], [], []], [[], [], []], [[], [], []]]
但是当你修改一个值时,其它相同位置的值也会被修改,像这样
list_b[1][1]=2
list_b
输出的其实是这个
[[[], 2, []], [[], 2, []], [[], 2, []]]
可以看到,并不是我们想要的修改结果,因为这种创建方式(list_b=[list_a for n in range(3)])其实是一种引用,list_b里有三个引用,都指向同一个list_a,所以当你修改其中一个时,对另外两个也会同样会变化。
正确用法
list_b=[[[] for m in range(3)] for n in range(3)]