ホームページ  >  記事  >  バックエンド開発  >  CPython で空のタプル、セット、リストが同じ ID を共有するのはなぜですか?

CPython で空のタプル、セット、リストが同じ ID を共有するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 05:55:02902ブラウズ

Why Do Empty Tuples, Sets, and Lists Share the Same ID in CPython?

CPython で空のタプル、セット、リストの ID が変わらない理由

CPython では、空のタプル、セット、リスト予期せず同じ ID を共有してしまいました。これは、各インスタンスが一意の ID を持つ可変オブジェクトの動作とは対照的です。

この動作の理由は、CPython のメモリ アロケーターにあります。 Python インタープリターは空のタプルまたはリストを作成するときに、小さなメモリ ブロックを割り当てます。次に、id 関数はこのメモリ ブロックのアドレスを返します。これはすべての空のタプルまたはリストで同じです。

辞書も変更可能ですが、より多くのメモリを必要とするため、動作が異なります。新しい空の辞書を作成するとき、一意のメモリ ブロックが割り当てられ、id 関数はこのブロックのアドレスを返します。

この概念を説明するために、空のタプルと ID の一貫性を示す Python コードを実行してみましょう。 lists:

<code class="python">tuple1 = ()
tuple2 = ()

id1 = id(tuple1)
id2 = id(tuple2)

print(id1 == id2)  # Output: True</code>

これは、複数の空のタプルが別々のオブジェクトであっても、同じ ID を持つことを示しています。

さらに、空のセットまたはリストの ID は、それを変数に代入してから id() を呼び出します。これは、最初の空のオブジェクトがまだ生きており、同じメモリ位置を持っているためです。

要約すると、CPython のオブジェクトの ID は、オブジェクトの存続期間中のみ一意です。オブジェクトが破棄されると、同じメモリ ブロックが別のオブジェクトに再利用され、ID が重複する可能性があります。

以上がCPython で空のタプル、セット、リストが同じ ID を共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。