Python 初学者です。
PHP の基礎を学びましたが、他の言語知識は、ほぼありません。
PHP を学んだときに内部で refcount
や is_ref
などで変数名と値を管理しているということを学び、理解が深まりました。
Pythonの入門書を読んだ程度ですが、理解を深めるために Python の内部でどのように処理されているか調べています。
調べていて、Python の オブジェクトID と メモリアドレス の関係について理解できていないので、教えてください。
id()
でオブジェクトの「識別値(identity)」を知ることができます。
この識別値がオブジェクトIDかと思います。
Pythonのドキュメントを見ると下記のように記載されています。
CPython 実装の詳細: CPython では、id(x) は x が格納されているメモリ上のアドレスを返します。
CPythonはC言語で記述された処理系ということは存じています。
気になるのは「メモリ上のアドレス」ということです。
私の中ではメモリ上のアドレスというと 0x7fffc0c5d57c
のように16進数で表示されるという認識です。
ですが、Python の id()
では整数で表示されます。
勝手な憶測ですが、メモリ上のアドレスを10進数で表しているわけではないと思います。
質問1
これは id()
関数がメモリ上のアドレスをもとにして、整数で表したということでしょうか?
それとも、メモリ上のアドレスとは関係なしにオブジェクトごとにオブジェクトIDが付けられているのでしょうか?
質問2
オブジェクトIDがオブジェクトごとに割り振られているから不明ですが、このオブジェクトID(identity?)が内部で表すとどこに該当するかわかりませんでした。(C言語に関する理解が浅いため;;)
下記は調べたときの内部構造を表した図です。
引用元:Python 源码阅读 - 类型
オブジェクトIDがオブジェクトごとに割り振られているとした場合、内部構造で表すとどこに位置するのでしょうか?
質問の意図がわかりにくいところもあるかもしれませんが、ご存知の方いれば、教えてくださいm(__)m
回答3件
あなたの回答
tips
プレビュー