天天看點

Python使用for循環定義二維數組和使用 * 定義二維數組的問題與差別

發現這個問題在于LeetCode寫算法時明明和題解一模一樣但結果就是不對,排查發現問題出在定義數組上

我們先來看兩個數組:

Python使用for循環定義二維數組和使用 * 定義二維數組的問題與差別

兩個數組看似完全一緻,使用 == 也輸出True

Python使用for循環定義二維數組和使用 * 定義二維數組的問題與差別

但使用起來卻不一緻,将兩個數組的【1,1】位置設定值,可以看到a數組将【0,1】和【1,1】位置都設定成了1,而b數組則是正确的将【1,1】位置設定為1

Python使用for循環定義二維數組和使用 * 定義二維數組的問題與差別

根據我的猜測,使用 * 來定義二維數組時會複制之前的一維數組,即一維資料都會指向同一位址,每一行都是一樣的。是以

[[0]*3]*2

并不能當做我們所熟知的二維數組,建議以後定義二維數組盡量使用

b = [[0]*3 for _ in range(2)]

的方式。