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

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

Susan Sarandon
Susan Sarandon原創
2024-12-22 04:36:13372瀏覽

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

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