首頁 > 後端開發 > Python教學 > Python 的 = 運算子如何根據 __iadd__ 和 __add__ 對清單產生不同的影響?

Python 的 = 運算子如何根據 __iadd__ 和 __add__ 對清單產生不同的影響?

Susan Sarandon
發布: 2024-12-22 04:36:13
原創
406 人瀏覽過

How Does Python's  = Operator Differentially Affect Lists Depending on __iadd__ and __add__?

= 運算子如何在Python 中對列表進行操作

Python 中的= 運算子在應用於清單時會表現出意外運算子的行為。此行為歸因於 iaddadd 特殊方法之間的區別。

iaddadd

  • __iadd__':
  • __add__': 傳回一個新物件;用於標準運算子。

列表上的行為

當 = 在具有

iadd 方法的列表上使用時,列表已就地修改。如果未定義 iadd,則呼叫 add,從而產生一個新清單。

範例

考慮以下內容code:

class foo:
    bar = []
    def __init__(self, x):
        self.bar += [x]

class foo2:
    bar = []
    def __init__(self, x):
        self.bar = self.bar + [x]

f = foo(1)
g = foo(2)
print(f.bar)
print(g.bar)

f.bar += [3]
print(f.bar)
print(g.bar)

f.bar = f.bar + [4]
print(f.bar)
print(g.bar)

f = foo2(1)
g = foo2(2)
print(f.bar)
print(g.bar)
登入後複製

輸出

[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]
登入後複製

解釋

    foo實作了 __iadd__,所以 = 修改f.bar,導致它影響所有實例foo.
  • foo2 缺少 __iadd__,所以 = 觸發 __add__,回傳一個新清單來取代 f.bar。
  • foo2 保留其原始bar 列表,而foo 修改它

結論

= 在列表上的行為取決於它是否在調用

iaddadd__。就地修改透過 __iadd__ 進行,而 __add 建立一個新清單。

以上是Python 的 = 運算子如何根據 __iadd__ 和 __add__ 對清單產生不同的影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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