ホームページ > バックエンド開発 > 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 の特殊メソッドの違いに起因します。

iadd vs add

  • __iadd__': インプレース加算。作用を受けるオブジェクトを変更します。
  • __add__': 新しいオブジェクトを返します。標準演算子に使用されます。

リストでの動作

iadd メソッドでリストに = を使用すると、リストその場で変更されます。 iadd が定義されていない場合、add が呼び出され、新しいリストが作成されます。

次のことを考えてください。コード:

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 はそれを変更します

結論

リスト上の = の動作は、iadd を呼び出すか add__ を呼び出すかによって異なります。インプレース変更は __iadd__ で行われ、__add は新しいリストを作成します。

以上がPython の = 演算子は、__iadd__ と __add__ に応じてリストにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート