使用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)部列表都是獨立的個體,修改一個并不會傳導到另一個:
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探索Python函數(shù)調(diào)用為何加速代碼執(zhí)行原理
Python 作為一種解釋型語言,其執(zhí)行速度相對于編譯型語言可能會較慢,然而,在Python中,通常觀察到代碼在函數(shù)中運行得更快的現(xiàn)象,這個現(xiàn)象主要是由于函數(shù)調(diào)用的內(nèi)部優(yōu)化和解釋器的工作方式導致的,本文將深入探討這個現(xiàn)象,并通過詳細的示例代碼進行解釋2024-01-01