不同的行為:list.__iadd__ 與list.__add__
考慮以下神秘的Python 代碼:
x = y = [1, 2, 3, 4] x += [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4, 4]
考慮以下神秘的Python 代碼:
x = y = [1, 2, 3, 4] x = x + [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4]
現在,將其與以下程式碼片段並置:
令我們困惑的是它們行為上的明顯差異。為什麼 x = [4] 會改變原始列表 x,而 x = x [4] 會產生一個新列表? 答案在於 Python 的物件方法。 list.__iadd__ 透過將第二個清單的元素附加到現有清單上來改變現有清單。相反,list.__add__ 建立一個包含兩個輸入清單的元素的新清單。 像 x = y 這樣的表達式首先嘗試呼叫 __iadd__。如果 __iadd__ 可用,它將執行這個突變魔法。否則,它將預設為 __add__,它會建立一個新清單並將其指派給 x。由於列表類別定義了 __iadd__,第一個程式碼片段改變了原始的 x 列表,而後一個程式碼片段建立了一個新列表並將其指派給 x,而 y 保持不變。以上是為什麼`x = [4]`修改`x`但`x = x [4]`在Python中建立一個新清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!