首頁 > 後端開發 > Python教學 > 為什麼修改巢狀 Python 清單中的子清單會影響所有子清單?

為什麼修改巢狀 Python 清單中的子清單會影響所有子清單?

Barbara Streisand
發布: 2024-12-29 07:50:12
原創
321 人瀏覽過

Why Does Modifying a Sublist in a Nested Python List Affect All Sublists?

Python 中的巢狀清單可變性混亂

簡介:

簡介:

一個常見問題處理巢狀清單時出現。對子清單所做的變更會意外影響外部清單中的所有其他子清單。這種意外行為源自於清單創建和可變性的底層機制。

問題:
xs = [[1] * 4] * 3
登入後複製

考慮以下程式碼:
xs[0][0] = 5
登入後複製

This程式碼建立一個列表列表,其中每個子列表包含四個 1。但是,修改最裡面的一個元素(如下所示)會影響所有子清單:

不是僅更改第一個子清單的第一個元素,而是所有子清單的所有第一個元素都修改為5。

原因:

理解這種行為的關鍵在於方式Python 將序列相乘。在現有清單 [x] 上使用 * 運算子時,它不會建立新清單。相反,它會創建對同一列表對象的多個引用。 因此,在代碼xs = [[1] * 4] * 3 中,表達式[1] * 4 被計算一次,並且計算了3 次對該單一列表的引用被分配給外部列表。這意味著所有子列表都是同一個物件。

解決方案:
xs = [[1] * 4 for _ in range(3)]
登入後複製

要建立獨立的子列表,您可以使用列表來理解:

在這種情況下,列表推導式每次迭代都會重新計算[1] * 4表達式,從而產生三個不同的結果

整數的不變性:需要注意的是,Python 中的整數是不可變的,這意味著它們的值不能更改。因此,即使 * 運算子建立對相同清單的多個引用,該清單中的整數值仍然不受影響。

以上是為什麼修改巢狀 Python 清單中的子清單會影響所有子清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板