使用Python初始化多維列表遇到的問題詳解
使用Python初始化多維列表遇到的問題
問題
我們知道有兩種方式可以初始化一個m*n二維列表:
- 使用*
m, n = 3, 2 x = [[0] * n] * m
- 使用for
y = [[0] * 2 for i in range(3)] print(x) print(y)
乍一看, 兩者得到的結(jié)果是相同的:
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]
實則其中有大坑,我們試著修改下x,y:
x[1][1]=2 y[1][1]=2 print(x) print(y)
得到如下結(jié)果:
[[0, 2], [0, 2], [0, 2]]
[[0, 0], [0, 2], [0, 0]]
坑就在這,方法1得到的多維列表,內(nèi)層列表其實只有一份拷貝,修改一個就等于修改所有,而方法2內(nèi)部列表都是獨立的個體,修改一個并不會傳導(dǎo)到另一個:
x = [[0]*2]*3 y = [[0] * 2 for i in range(3)] print(*[id(i) for i in x]) print(*[id(i) for i in y])
輸出:
2128813329536 2128813329536 2128813329536
2128813351680 2128813351616 2128813351488
結(jié)論
為了避免令人迷惑的結(jié)果出現(xiàn), 初始化多維列表時盡量使用:
[[0]*n for i in range(m)]
到此這篇關(guān)于使用Python初始化多維列表遇到的問題詳解的文章就介紹到這了,更多相關(guān)Python初始化多維列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter Notebook讀入csv文件時出錯的解決方案
這篇文章主要介紹了Jupyter Notebook讀入csv文件時出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Pytorch復(fù)現(xiàn)擴(kuò)散模型的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Pytorch復(fù)現(xiàn)擴(kuò)散模型,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的可以跟隨小編一起了解一下2023-04-04
python入門:這篇文章帶你直接學(xué)會python
本教程并未涵蓋Python語言的全部內(nèi)容,只是一個入門的教程,Python有非常多的庫以及很多的功能特點需要學(xué)習(xí),小編只是拋磚引玉,希望大家可以從中受益2018-09-09
一篇文章帶你了解python標(biāo)準(zhǔn)庫--random模塊
這篇文章主要給大家介紹了關(guān)于Python中random模塊常用方法的使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08
探索Python函數(shù)調(diào)用為何加速代碼執(zhí)行原理
Python 作為一種解釋型語言,其執(zhí)行速度相對于編譯型語言可能會較慢,然而,在Python中,通常觀察到代碼在函數(shù)中運(yùn)行得更快的現(xiàn)象,這個現(xiàn)象主要是由于函數(shù)調(diào)用的內(nèi)部優(yōu)化和解釋器的工作方式導(dǎo)致的,本文將深入探討這個現(xiàn)象,并通過詳細(xì)的示例代碼進(jìn)行解釋2024-01-01

