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

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

Linda Hamilton
發布: 2025-01-01 11:10:09
原創
929 人瀏覽過

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

巢狀清單突變:了解意外行為

在Python 中,可變資料結構(例如清單)在巢狀時可能會出現意外行為。考慮建立清單清單的範例:

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

這會初始化一個巢狀清單結構,其中每個子清單包含四個設定為 1 的元素。但是,修改這些最裡面的值之一,如下所示:

xs[0][0] = 5
登入後複製

影響每個子列表的所有第一個元素,結果位於:

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
登入後複製

意外行為的原因

問題的根源在於* 運算子應用於物件時的工作方式。在本例中,行:

[[1] * 4] * 3
登入後複製

建立對同一子清單 [1] 4 的三個引用,而不是建立三個獨立的副本。這是因為 對表達式 [1] * 4 的求值結果進行運算,該結果是單一子清單。因此,對此單一子清單的任何變更都會反映在所有引用中。

解決問題

要建立獨立的子列表,有必要強制對[1] * 每個子列表有 4 個表達式。這可以使用列表理解來實現,如下所示:

[[1]*4 for _ in range(3)]
登入後複製

在這種情況下,每次都會評估[1]*4 表達式,從而創建三個不同的子列表以及任何更改到一個子列表只會影響該子列表,而不影響其他子列表。

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

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