1. はじめに
Pythonではすべてが「オブジェクト」として扱われています。そして、各オブジェクトには一意のIDが割り振られています。本記事では、Python|オブジェクトのIDを取得する方法について、初心者にもわかりやすく解説します。
id()
関数を使えば、変数やデータ構造などの「オブジェクトがどこに存在しているか(メモリ上のアドレス)」を確認できます。この記事を読むことで、Pythonにおけるオブジェクトの仕組みをより深く理解でき、実務や学習で役立つ視点を得ることができます。
2. Pythonのid()関数とは?
2-1. オブジェクトのIDとは何か
PythonのオブジェクトIDは、そのオブジェクトがメモリ上のどこに格納されているかを示す値です。これは、オブジェクトが同一であるかどうかを確認するのに使われます。
2-2. 基本の構文と使用例
id()
関数の基本構文は以下のとおりです。
x = 100
print(id(x)) # xのIDを表示する
実行結果:
140736097118416
このように、id(x)
は整数値を返します。これはPythonの内部でメモリアドレスとして管理されている値です。
2-3. 同じ値の変数のIDを比較
a = 100
b = 100
print(id(a))
print(id(b))
実行結果:
140736097118416
140736097118416
同じ値の場合、Pythonではオブジェクトの再利用(インターン)により、同じIDが割り当てられることがあります。
3. よくある使い方・応用例
3-1. 同一オブジェクトの比較(is と id)
Pythonでは「is」演算子を使って、2つのオブジェクトが同一かどうかを確認できますが、これはid()
の比較と同じ意味を持ちます。
x = [1, 2, 3]
y = x # 同じオブジェクトを参照
print(x is y) # True
print(id(x) == id(y)) # True
実行結果:
True
True
3-2. 値が同じでも別オブジェクトの場合
a = [1, 2, 3]
b = [1, 2, 3] # 同じ内容だが別のオブジェクト
print(a == b) # True(値の比較)
print(a is b) # False(IDの比較)
print(id(a), id(b)) # 異なるID
実行結果:
True
False
140298760983232 140298760983488
このように、「等しい(==)」と「同一である(is / id)」は異なる概念であることを理解することが重要です。
4. 注意点・エラー対策
4-1. 値が同じなのにIDが違う?
Pythonでは、数値や文字列などの一部のオブジェクトは最適化されて、同じIDが使われることがあります(インターン)。しかし、list
やdict
などの可変オブジェクトは、同じ内容でも別のIDになります。
4-2. IDを比較しても意味がない場面もある
たとえば、以下のようなケースではID比較が適切ではありません。
- 数値や文字列の小さい値(インターンされる)
- 一時的な変数によりIDが異なる
基本的には、オブジェクトの「値」を比較したい場合は ==
を使うようにしましょう。
5. まとめ
今回はPython|オブジェクトのIDを取得する方法として、id()
関数の使い方や、同一オブジェクトの比較方法について解説しました。
id()
関数でオブジェクトのID(メモリアドレス)を取得できるis
演算子とid()
の比較で、同一オブジェクトかどうかがわかる- リストや辞書などの可変オブジェクトは、同じ内容でもIDが異なる
実務では、オブジェクトの管理やバグ調査の際にID確認が役立つことがあります。学習中は、「==」と「is」の違いを理解することが上達のコツです。