使用清單乘法建立清單清單時,請小心意外變更。
使用簡單的列表乘法建立清單列表,例如:
xs = [[1] * 4] * 3
可能會導致意想不到的後果。更改一個子清單中的值會影響所有子清單:
xs[0][0] = 5 print(xs) # [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
乘法運算子 對物件進行操作,而不是對表達式進行運算式。因此, [[1] * 4] * 3 只看到評估的子清單 [1, 1, 1, 1] 三次。 不建立新的子列表,而是建立對現有子列表的參考。
要避免這種行為並確保獨立的子列表,請使用列表理解:
xs = [[1] * 4 for _ in range(3)]
此表達式每次迭代都會重新計算[ 1] * 4,從而產生不同的結果
需要注意的是,Python 中的整數是不可變的。這意味著像:
1.value = 2
這樣的操作是無效的,因為整數沒有可修改的值屬性。因此,儘管 [1] * 4 沒有複製整數本身,但這並不重要,因為整數無法修改。
以上是為什麼列表乘法在 Python 中建立共享子列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!