在Python 中,使用列表乘法創建列表列表,如[[1] 4] 3,會導致一個子清單的變更影響所有子清單的情況。這種行為是違反直覺的,可能會導致意想不到的後果。
使用列表乘法時,新列表是對原始列表的引用。當您修改新清單的元素時,您實際上是在修改原始清單中所有子清單所引用的元素。
出現這種意外行為是因為 Python 在列表理解之前計算乘法運算子 。在這種情況下, [[1] 4] 計算為單一子列表,並且 * 僅建立對該子列表的三個參考。
要避免這種行為並創建三個獨立的子列表,您可以使用列表理解,如下所示:
[[1] * 4 for _ in range(3)]
列表理解重新評估[1] * 4 每個子列表的表達式,產生三個不連結的不同子列表。
雖然列表乘法是創建具有重複元素的列表的便捷方法,了解其局限性很重要。列表乘法對現有物件進行操作,而無需查看表達式。它不會複製對象,而是創建對現有對象的參考。
相反,列表推導式會重新評估每個元素的表達式,並根據需要建立新物件。此行為可確保清單中的每個元素都是獨立的。
以上是為什麼在Python中使用列表乘法時修改一個子列表會影響所有子列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!