需求:想通过python生成m行n列的矩阵
方式1:(有问题)
data = [[0]*3]*4 #4行3列
print(data) #[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
赋值
data[0][0] = 1
print(data) #[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
为啥改变一个值会对列为0的所有元素改变呢?
解析:看下对应的内存指向地址
print(id(data[0][0]),id(data[1][0])) #1980216384 1980216384
print(id(data[0][1]),id(data[1][1])) #1980216352 1980216352
[[0]n]m这种方式是直接将[0]n 复制了m遍,是=号复制(注意不是浅拷贝,=与浅拷贝的list id是不同的),若[0]n发生了更改,则m个都发生更改。
方式2:
data1 = [[0 for i in range(3)] for j in range(4)]
print(data)#[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
赋值
data[0][0] = 1
print(data) #[[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]