首頁  >  文章  >  後端開發  >  `list.__iadd__` 和 `list.__add__` 之間有什麼區別?

`list.__iadd__` 和 `list.__add__` 之間有什麼區別?

Linda Hamilton
Linda Hamilton原創
2024-10-30 08:55:02586瀏覽

What is the difference between `list.__iadd__` and `list.__add__` and why does it lead to different results when modifying lists in Python?

理解list.__iadd__ 和list.__add__ 之間的區別

在Python 中,物件可以定義特殊的「魔法」方法來定義支援它們的互動與某些運營商。兩個這樣的方法是 iadd 和 __add__,分別用於就地和常規加法操作。

考慮以下兩個程式碼片段:

<code class="python"># Example 1
x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]

# Example 2
x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]</code>

為什麼這樣做這兩個範例的行為不同?

在這兩種情況下,我們都從兩個相同的清單 x 和 y 開始,然後使用 x = [4] 或 x = x [4] 執行加法運算。

當使用 x = [4] 時,會呼叫 Python 的 __iadd__ 方法,該方法執行就地加法。這表示原始清單 x 已發生變化,並且其內容已使用清單 [4] 中的元素進行更新。結果,x 和 y 現在都包含相同的修改後的清單。

相反,當使用 x = x [4] 時,會呼叫 Python 的 __add__ 方法,該方法傳回一個包含 x 和 y 的元素的新列表和[4]。原始清單 x 保持不變,y 仍然指向初始未修改的清單。

以上是`list.__iadd__` 和 `list.__add__` 之間有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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