需求:想通過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]]