リストの = 演算子の異常な動作
Python 内で = 演算子をリストで使用すると、予期しない動作が発生する可能性があります。この特異な動作は、iadd と add 特殊メソッドの違いに由来します。
iadd メソッドでは、インプレース加算、変更が可能です。操作対象のオブジェクト。一方、add は通常、新しいオブジェクトを返し、演算子によって使用されます。
リストのような変更可能なオブジェクトの場合、= は __iadd__ を呼び出し、その結果オブジェクト自体が変更されます。ただし、タプル、文字列、整数などの不変型の場合は、新しいオブジェクトが生成されます (事実上、a = b は a = a b に変換されます)。
その結果、iadd のいずれかの選択が行われます。そして追加が重要です。 a = b を使用すると、iadd が呼び出され、その後 a が変更されます。一方、a = a b は新しいオブジェクトを作成し、それを a に割り当てます。これらは別個の操作を表します。
iadd と add__ の両方をサポートする型の場合、適切なメソッドを選択する際には慎重な考慮が必要です。 a = b は __iadd をトリガーして a を変更しますが、a = a b は新しいオブジェクトを生成して a.
に割り当てます。以上がPython の = 演算子がリストに対して異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。