ホームページ  >  記事  >  バックエンド開発  >  `list.__iadd__` と `list.__add__` の違いは何ですか?また、Python でリストを変更すると異なる結果が生じるのはなぜですか?

`list.__iadd__` と `list.__add__` の違いは何ですか?また、Python でリストを変更すると異なる結果が生じるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 08:55:02651ブラウズ

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 では、オブジェクトは相互作用をサポートする特別な「マジック」メソッドを定義できます。特定のオペレーターを使用して。このような 2 つのメソッドは、iadd と __add__ で、それぞれインプレース加算演算と通常の加算演算に使用されます。

次の 2 つのコード スニペットを考えてみましょう。

<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>

なぜそうするのかこれら 2 つの例は動作が異なりますか?

どちらの場合も、2 つの同一のリスト x と y から開始し、x = [4] または x = x [4] のいずれかを使用して加算演算を実行します。

x = [4] を使用すると、Python の __iadd__ メソッドが呼び出され、インプレース加算が実行されます。これは、元のリスト x が変更され、その内容がリスト内の要素で更新されることを意味します [4]。その結果、x と y の両方に同じ変更されたリストが含まれるようになりました。

対照的に、x = x [4] を使用すると、Python の __add__ メソッドが呼び出され、両方の x の要素を含む新しいリストが返されます。および[4]。元のリスト x は変更されず、y は依然として初期の未変更のリストを指します。

以上が`list.__iadd__` と `list.__add__` の違いは何ですか?また、Python でリストを変更すると異なる結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。