Python のリストに対する = 演算子の操作方法
Python の = 演算子をリストに適用すると、予期しない動作が発生します。この動作は、iadd と add の特殊メソッドの違いに起因します。
iadd vs 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]
説明
結論
リスト上の = の動作は、iadd を呼び出すか add__ を呼び出すかによって異なります。インプレース変更は __iadd__ で行われ、__add は新しいリストを作成します。
以上がPython の = 演算子は、__iadd__ と __add__ に応じてリストにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。