結果として生じるクラス インスタンスの同じオブジェクト ID
名前を割り当てずにクラスの複数のインスタンスを作成すると、Python は同じ ID をそれらすべて。一見すると驚くかもしれないこの動作は、Python のオブジェクトの存続期間の概念によるものです。
オブジェクトの ID は、オブジェクトの存続期間中のみその一意性を保証します。この例では、someClass() が 1 つのステートメントの範囲内で複数回呼び出されます。呼び出しごとに新しいオブジェクトが作成されます。ただし、これらのオブジェクトは変数に割り当てられておらず、ステートメントの実行が終了するとすぐにスコープが終了するため、ガベージ コレクションに使用できるようになります。
Python のデフォルト実装である CPython では、ガベージ コレクションは参照カウントを使用します。さらに、オブジェクトの ID はそのメモリ位置に関連付けられます。この要素の組み合わせは、someClass() の結果として生じるインスタンスが同じ ID を共有する理由を説明しています。新しいオブジェクトが同じ関数スコープ内で作成されると、メモリが割り当て解除されて再利用されます。
この動作に対処し、クラスに個別の ID を確保するためです。インスタンスの場合は、オブジェクトをデータ構造内に保持するか、クラス内にカスタム ID スキームを実装することを検討してください。
以上が連続する名前のない Python クラス インスタンスが同じオブジェクト ID を共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。