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 と y の両方が変更されます。 4.
ただし、2 番目のスニペットでは、x = x [4] は __add__ メソッドを使用します。
したがって、x の値は [1, 2] になります, 3, 4, 4] ですが、y は元の値 [1, 2, 3, 4] を保持します。
以上が`list.__iadd__` は元のリストと割り当てられたリストの両方を変更するのに、`list.__add__` は割り当てられたリストのみを変更するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。