Python のリスト上の =" の予期しない動作を理解する
Python の = 演算子をリストに適用すると、予期しない動作が発生する可能性があります。変更および結合するための特別なメソッドの Python の実装に由来します。オブジェクト。
iadd および add 特殊メソッド
= 演算子は、iadd iadd が適用されるオブジェクトの特別なメソッド。使用できない場合は、代わりに add を使用することになります。これらの特別なメソッドは =.
__iadd__: In-Place Addition
iaddメソッドはインプレース加算を実行し、= が使用される場合に作用するオブジェクトを変更します。 __iadd__ をサポートするオブジェクトでは、オブジェクトはリストのような可変型の場合に当てはまります。
__add__: 通常の加算一方、
addメソッドは、加算の結果を表す新しいオブジェクトを作成します。これは通常、次のような不変型に使用されます。
リストでの動作リスト オブジェクトで = が使用されると、Python は __iadd__ の呼び出しを試みます。リストは可変であるため、__iadd__ をサポートします。これにより、リストがその場で変更され、クラスのすべてのインスタンスに影響します。
対照的に、= がリスト オブジェクトで使用される場合、
addが呼び出され、新しいリストが作成されます。作成されました。これは、与えられた例で f.bar = [3] が f.bar と g.bar の両方を変更するのに対し、f.bar = f.bar [4] が新しいリスト オブジェクトを作成して f.bar.結論
iadd
と __add__ の違いを理解すると、その理由が明らかになります =他の型と比べてリスト上で異なる動作をします。重要な点は、 = は __iadd__ をサポートしている場合はオブジェクトを直接変更するのに対し、 = は __add__ を使用して新しいオブジェクトを作成するということです。以上がPython の ` = ` 演算子がリストに対して他のデータ型とは異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。