ホームページ >バックエンド開発 >Python チュートリアル >複数の名前のない Python オブジェクトが同じ ID を共有する場合があるのはなぜですか?
Python のオブジェクト ID: 複数の名前のないオブジェクトが同じ ID を共有する理由
Python で特定のクラスの複数のオブジェクトを作成する場合、各インスタンスが一意の ID (ID) を持つことを期待します。ただし、特定の状況下では、名前のないオブジェクトが連続して作成されると、それらのオブジェクトが同じ ID を持つことになります。
オブジェクトの有効期間と ID について
オブジェクトの ID は、オブジェクトの ID を表します。メモリ内のユニークな場所。ただし、この ID が一意であることが保証されるのは、プログラムの実行中ではなく、オブジェクトの存続期間中のみです。
この例では、print:
print(someClass()) print(someClass())print が返されると、作成されたオブジェクトはどの変数からも参照されなくなり、ガベージ コレクションの対象になります。 Python の CPython 実装では、それらは事実上即座に割り当て解除されます。
CPython 実装の詳細
Python のガベージ コレクションは、参照カウントによって発生します。さらに、オブジェクトの ID はそのメモリ位置に関連付けられます。最初の名前のないオブジェクトの割り当てが解除されると、そのオブジェクトが占有していたメモリ位置が使用可能になります。その結果、次に作成されるオブジェクトは同じメモリ位置に配置され、両方のオブジェクトに同じ ID が割り当てられます。
解決策
オブジェクトの個別の ID を確保するには、オブジェクトへの参照をリストに保持するか、実装することを検討してください。適切な保証を提供するクラス固有の ID (次のようなもの):class SomeClass: next_id = 0 def __init__(self): self.id = SomeClass.nextid SomeClass.nextid += 1独自の ID ジェネレーターを実装することで、オブジェクトの存続期間に関係なく、オブジェクトごとに一意の ID を作成できます。
以上が複数の名前のない Python オブジェクトが同じ ID を共有する場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。