為什麼`x = [4]`修改`x`但`x = x [4]`在Python中建立一個新清單?

Susan Sarandon
發布: 2024-10-30 02:09:03
原創
903 人瀏覽過

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

不同的行為: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中文網其他相關文章!

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