(python)idとはなんだ??


はじめに

突発的な興味からpythonを勉強し始めた大学生です。
またC言語・C++・C#も学んでいます。備忘録を兼ねてまとめていきますので、同じ疑問をお持ちになった方是非お役立てください。

今回は、id関数についてです。
初見でなんだこれは、いつ使うんだ、数字出てくるけれどこれに何の有用性が...となったので調べてみました。

id関数とは

Pythonは「オブジェクト指向言語」と呼ばれるプログラミング言語であり、あらゆる情報を「オブジェクト」という単位で管理しています。オブジェクトには「オブジェクトID」という"識別子"が与えられて管理されています。

公式ドキュメントにも

オブジェクトの "識別値" を返します。この値は整数で、このオブジェクトの有効期間中は一意かつ定数であることが保証されています。有効期間が重ならない 2 つのオブジェクトは同じ id() 値を持つかもしれません。

どうやらオブジェクトとオブジェクトに付与されたIDは1:1対応しており、識別子(識別値)であるID(メモリアドレス)を通じてオブジェクトを特定できるようです。(※コメントをいただき修正しました)

イメージが湧きにくいですが、数字・文字列・リスト・タプルなどまで全てオブジェクトです。

試してみる

ひとまず手を動かして確認してみます。

引数に数字や文字列を直接指定した場合

print(id(1)) #数字
print(id("python")) #文字列
print(id([1,2,3])) #リスト
print(id((10,20,30))) #タプル

実行結果↓

140735205943088
3005763814640
3005795551296
3005795206592

確かにそれぞれ異なるIDが付与されています。

引数に変数を指定した場合

それでは、id関数の引数に変数を入れた場合はどうなるのでしょうか。

x=1
y="python"
print(id(x))
print(id(y))

実行結果↓

140735205943088
3005763814640
#数字や文字列を直接指定した時と変わらない

引数に変数を指定した場合は、変数が参照しているオブジェクトのIDが取得できます。

終わりに

id関数はオブジェクトのメモリアドレスであるオブジェクトIDを取得できる関数でした。

初めて見た時は戸惑いましたが、なんだか便利そうですね(こなみ)
ここまでお読みいただきありがとうございました。

参考記事
[https://monozukuri-c.com/python-funclist-id/]
[https://docs.python.org/ja/3/library/functions.html#id]