Python でのオブジェクト ID 生成の不一致を明らかにする
名前を割り当てずに Python で同じクラスの複数のオブジェクトを作成すると、次のような問題が発生する可能性があります。興味深い観察です。これらのオブジェクトは同じ ID を共有することがあります。この動作は、各オブジェクト インスタンスが一意の ID を持つことが予想されるため、直観に反するように見えるかもしれません。
この現象を理解する鍵は、Python におけるオブジェクトの存続期間の性質にあります。オブジェクトの ID は、その存続期間内でのみ排他的であることが保証されます。単一の print() 呼び出し内で立て続けに作成された unname オブジェクトの場合、それらの存続期間は重複しません。したがって、後続のインスタンスが同じメモリ位置を占有し、同じ ID が得られることが可能になります。
この動作は、CPython 実装の微妙な違いの組み合わせから発生します。まず、Python は参照カウントを使用してメモリを管理し、次に、オブジェクト ID は、オブジェクトを保持する変数のメモリ アドレスにリンクされます。最初のオブジェクトが作成され、print() 呼び出しですぐに割り当てが解除された後、次のオブジェクトには解放されたメモリ位置が割り当てられ、ID が重複します。
この不一致を克服するには、オブジェクトの存続期間 (オブジェクトをリストに保存するなど)。あるいは、明確な保証を提供するカスタムのクラス固有 ID を作成することもできます。このような措置を実装することにより、各オブジェクト インスタンスが一意の識別子を持つようにすることができます。
以上が一部の Python オブジェクトが同じ ID を共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。