使用[[]] * n 進行列表初始化時的列表連結問題
使用[[]] 初始化列表列表時 n,程式設計師經常會遇到一個意想不到的問題,即列表似乎連結在一起。發生這種情況是因為 [x]n 語法建立對相同基礎清單物件的多個引用,而不是建立不同的清單實例。
為了說明該問題,請考慮以下代碼:
x = [[]] * 3 x[1].append(0) print(x)
這段程式碼的輸出是:
[[0], [0], [0]]
而非預期的輸出:
[[], [0], []]
問題源自於清單中的每個元素都是對同一列表物件的引用。當其中一個元素被修改時,所有其他元素都會受到影響。
要建立真正不同列表的列表,正確的方法是使用列表理解:
x = [[] for i in range(3)]
此語法為清單中的每個元素建立一個新的列表對象,確保它們是獨立的。
以下程式碼用作演示:
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3