用久了Numpy,今天在用List创建二维数组的时候,遇到了一个小问题,记录一下。
问题
创建二维List的时候,最开始使用了下面的方法
cell = [[0] * 3] * 3
print(cell)
输出的结果为
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
看起来很完美,但是在使用的时候,就问题暴露了,比如这样
cell[0][1] = 1
print(cell)
期望得到的结果是
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
但是得到的结果是
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
原因
这样操作是浅拷贝,浅拷贝的cell
里面的三个列表的内存是指向同一块,不管修改哪个列表,其他两个列表也会跟着改变。太骚了这个操作。
解决
改成这样
cell = [[0 for _ in range(3)] for _ in range(3)]
cell[0][1] = 1
print(cell)
就可以啦
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]