首頁 >後端開發 >Python教學 >為什麼在Python中使用列表乘法時修改一個子列表會影響所有子列表?

為什麼在Python中使用列表乘法時修改一個子列表會影響所有子列表?

DDD
DDD原創
2024-12-22 08:24:101003瀏覽

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

列表列表更改意外地反映在子列表中

在Python 中,使用列表乘法創建列表列表,如[[1] 4] 3,會導致一個子清單的變更影響所有子清單的情況。這種行為是違反直覺的,可能會導致意想不到的後果。

說明

使用列表乘法時,新列表是對原始列表的引用。當您修改新清單的元素時,您實際上是在修改原始清單中所有子清單所引用的元素。

出現這種意外行為是因為 Python 在列表理解之前計算乘法運算子 。在這種情況下, [[1] 4] 計算為單一子列表,並且 * 僅建立對該子列表的三個參考。

解決方案

要避免這種行為並創建三個獨立的子列表,您可以使用列表理解,如下所示:

[[1] * 4 for _ in range(3)]

列表理解重新評估[1] * 4 每個子列表的表達式,產生三個不連結的不同子列表。

與列表乘法的比較

雖然列表乘法是創建具有重複元素的列表的便捷方法,了解其局限性很重要。列表乘法對現有物件進行操作,而無需查看表達式。它不會複製對象,而是創建對現有對象的參考。

相反,列表推導式會重新評估每個元素的表達式,並根據需要建立新物件。此行為可確保清單中的每個元素都是獨立的。

其他資源

  • [如何複製列表,使其在之後不會意外更改分配? ](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-assignment)
  • [如何初始化二維數組(列表的列表,如果不使用NumPy) Python? ](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-Dimension-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [字典列表僅儲存每個中的最後一個附加值迭代](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-append-value-in- every-iteration)

以上是為什麼在Python中使用列表乘法時修改一個子列表會影響所有子列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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