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

Linda Hamilton
發布: 2024-10-30 08:55:02
原創
648 人瀏覽過

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中文網其他相關文章!

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