首頁 >後端開發 >Python教學 >為什麼列表乘法在 Python 中建立共享子列表?

為什麼列表乘法在 Python 中建立共享子列表?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-23 12:55:10991瀏覽

Why Does List Multiplication Create Shared Sublists in Python?

清單清單中的意外變更

使用清單乘法建立清單清單時,請小心意外變更。

問題描述

使用簡單的列表乘法建立清單列表,例如:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn