ホームページ  >  記事  >  バックエンド開発  >  `list.__iadd__` は元のリストと割り当てられたリストの両方を変更するのに、`list.__add__` は割り当てられたリストのみを変更するのはなぜですか?

`list.__iadd__` は元のリストと割り当てられたリストの両方を変更するのに、`list.__add__` は割り当てられたリストのみを変更するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 17:05:25539ブラウズ

Why does `list.__iadd__` modify both original and assigned lists, while `list.__add__` only modifies the assigned list?

list.__iadd__ と list.__add__ の動作の不一致

次のスニペットを考えてみましょう。

<code class="python">x = y = [1, 2, 3, 4]
x += [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4, 4]</code>

対照的に

<code class="python">x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4]</code>

これら 2 つのコード スニペットの動作が異なるのはなぜですか?

説明

主な違いは、 「 」演算子。最初のスニペットでは:

  • x = [4] はリスト クラスの __iadd__ メソッドを使用します。これにより、

    • 内の元のリスト (x) が変更されます。 -place
    • 2 番目のリスト ([4]) の要素で拡張します

これにより、値が含まれるように x と y の両方が変更されます。 4.

ただし、2 番目のスニペットでは、x = x [4] は __add__ メソッドを使用します。

  • x [4] は、x と [4] を連結して新しいリストを作成します。
  • x 変数はこの新しいリストに再割り当てされます
  • y は別のオブジェクトなので変更されません

したがって、x の値は [1, 2] になります, 3, 4, 4] ですが、y は元の値 [1, 2, 3, 4] を保持します。

以上が`list.__iadd__` は元のリストと割り当てられたリストの両方を変更するのに、`list.__add__` は割り当てられたリストのみを変更するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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