ホームページ > バックエンド開発 > Python チュートリアル > 複数の Python オブジェクトが同じ ID を共有する場合があるのはなぜですか?

複数の Python オブジェクトが同じ ID を共有する場合があるのはなぜですか?

Barbara Streisand
リリース: 2024-12-21 20:12:39
オリジナル
393 人が閲覧しました

Why Do Multiple Python Objects Sometimes Share the Same ID?

複数のオブジェクトの同じ ID: Python の奇妙な動作

Python では、名前を割り当てずに複数のオブジェクトを作成すると、実際にオブジェクトが共有される可能性があります。同じID。この明らかな矛盾は、オブジェクトの ID がその存続期間内でのみ一意であるという事実から生じています。

someClass() など、オブジェクトを参照する変数を作成すると、オブジェクトの存続期間は変数が作成された時点から始まります。が割り当てられ、範囲外になると終了します。あなたが提供した例では:

print(someClass())
print(someClass())
ログイン後にコピー

2 つの someClass() 呼び出しにより 2 つのオブジェクトが生成されますが、それらは両方とも同じ print 呼び出し内で作成および破棄されます。したがって、これらは同じライフタイムを共有し、同じ ID を持つことができます。

この動作は、Python 3.3.3 でガベージ コレクションに参照カウントが使用されることでさらに強調されます。オブジェクトの参照カウントがゼロになると (つまり、オブジェクトを参照する変数がなくなると)、そのオブジェクトは削除の対象になります。この例では、someClass() への 2 回目の呼び出しにより、最初のオブジェクトの参照カウントが 0 になり、即時割り当て解除の対象になります。

次に割り当てられるオブジェクトは同じメモリ位置に配置されるため、最初のオブジェクトと同じ ID になります。これは、同じクラスを連続して複数回呼び出すと、同じ ID を持つオブジェクトが生成される理由を説明しています。

オブジェクトに一意の ID が必要な場合は、明示的に変数に割り当てて保持することで、この動作を克服できます。 :

a = someClass()
b = someClass()
print(id(a))
print(id(b))
ログイン後にコピー

ここで、a と b は、たとえ同じクラスに属していても、異なる ID を持つ別個のオブジェクトを参照します。あるいは、独自のクラス固有の ID メカニズムを実装して、一意性を確保することもできます。

以上が複数の Python オブジェクトが同じ ID を共有する場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート