python嵌套列表的坑

Python的嵌套列表就是在列表中包含一個列表,除了手動創(chuàng)建外,可以用乘法

a=[[0]*3]*3
print(a)
#輸出結(jié)果為:[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
這樣看起來好像沒問題呀,但實(shí)際上呢?我們對其中一個元素進(jìn)行賦值
a=[[0]*3]*3
a[0][0]=1
print(a)
#輸出結(jié)果為:[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
出乎意料的是,我們原本只想改變一個值,結(jié)果更改了3個值,那就說明這種方法創(chuàng)建嵌套列表是出錯誤的。

出現(xiàn)這樣的結(jié)果,我們可以猜想是不是把[[0]*3]作為一個對象進(jìn)行了復(fù)制,指向同一個地址,并沒有創(chuàng)建新的列表對象

print(id(a[0]))
print(id(a[1]))
print(id(a[2]))
#輸出:
2731945169024
2731945169024
2731945169024
結(jié)果輸出的值一模一樣。事實(shí)上,我們把列表直接賦值給另一個列表后,修改其中一個的值,也會出現(xiàn)這樣的情況,我們可以借助pythontutor這個網(wǎng)站,來看一下創(chuàng)建過程,附上網(wǎng)站鏈接(pythontutor

可以看到與我們猜想的一致,那么該怎么正確創(chuàng)建呢?

a = [[0]*3 for _ in range(3)]
a[0][0]=1
print(a)
這下創(chuàng)建的就沒問題了
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容