創建數組—[[0]*n]*m與[[0 for _ in range(n)] for _ in range(m)]的區別


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM