異なる動作: list.__iadd__ と list.__add__
次の謎めいた Python コードを考えてみましょう:
x = y = [1, 2, 3, 4] x += [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4, 4]
次に、これを次のコード スニペットと並べてみましょう:
x = y = [1, 2, 3, 4] x = x + [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4]
私たちを困惑させるのは、彼らの行動の明らかな違いです。 x = [4] は元のリスト x を変更し、x = x [4] は新しいリストを生成するのはなぜですか?
答えは Python のオブジェクト メソッドにあります。 list.__iadd__ は、2 番目のリストの要素を既存のリストに追加することによって、既存のリストを変更します。逆に、list.__add__ は、両方の入力リストの要素で構成される新しいリストを作成します。
x = y のような式は、最初に __iadd__ の呼び出しを試みます。 __iadd__ が利用可能な場合、この突然変異マジックが実行されます。それ以外の場合は、デフォルトで __add__ が使用され、新しいリストが作成され、それが x に割り当てられます。 list クラスは __iadd__ を定義しているため、最初のコード スニペットは元の x リストを変更しますが、後のコード スニペットは新しいリストを作成して x に代入し、y は変更されません。
以上が`x = [4]` は `x` を変更するのに、`x = x [4]` は Python で新しいリストを作成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。