Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのid()関数の使い方を徹底解説

この記事では、Python 3.x(およびそれ以前のバージョン)における id() 関数の使い方と仕組みについて詳しく解説します。id() 関数はPython標準ライブラリに組み込まれており、コード実行時に自動的に利用可能になっているため、追加のインポートは不要です。

id()関数の基本

構文

id(<オブジェクト名>)

戻り値

int型 の識別値(ID)

id() 関数は、引数をちょうど1つだけ受け取ります。引数には、IDを取得したい対象のオブジェクト名を指定します。返されるIDは、複数の変数が同じデータを参照している場合を除き、各オブジェクトごとに一意の値となります。

このIDは、メモリ上のアドレスを表すものであり、Python内部でオブジェクトの管理に使用されています。CPythonの実装では、実際にオブジェクトが格納されているメモリアドレスそのものが返される点も覚えておくと良いでしょう。

サンプルコード

str_1 = "Tutorials"
print(id(str_1))

str_2 = "Tutorials"
print(id(str_2))

# 文字列の内容が同一のため True が返る
print(id(str_1) == id(str_2))

# 連結によって新しいオブジェクトが生成されるため False が返る
str_1 = str_1 + str_2
print(id(str_1) == id(str_2))

# 両変数が同じオブジェクトを参照するため True が返る
str_2 = str_1
print(id(str_1) == id(str_2))

実行結果

46939355256048
46939355256048
True
False
True

コードの解説

ケース1: 2つの文字列変数 str_1str_2 は同じ内容の文字列を持つため、Pythonの文字列インターニング(同一リテラルの共有)により同じオブジェクトを参照し、比較結果は True となります。

ケース2: 連結演算(+)によって新しい文字列オブジェクトが生成され、str_1 は別のオブジェクトを指すようになります。そのため、IDの比較結果は False となります。

ケース3: str_2 = str_1 という代入により、両変数は完全に同じオブジェクトを参照するため、比較結果は再び True となります。

注意点

IDの具体的な数値は、実行環境や実行ごとに異なります。重要なのは数値そのものではなく、同一のオブジェクトかどうかを判別できるという点です。また、小さな整数や短い文字列などはキャッシュ・インターニングの対象となるため、異なる変数でも同じIDになる場合があります。

まとめ

この記事では、Pythonにおける id() 関数の基本的な使い方と動作原理を学びました。IDはオブジェクトの一意性を示すものであり、変数への代入や演算によって参照関係がどう変化するかを理解するのに役立ちます。オブジェクトの同一性判定には is 演算子と組み合わせて使うことも多いため、ぜひ実際のコードで試してみてください。

  1. PythonでisNumber()関数を実装する方法をわかりやすく解説

    はじめに本記事では、Python 3.x(またはそれ以前のバージョン)を使ってisNumber()関数を自前で実装する方法を解説します。この関数は文字列を引数として受け取り、その文字列が数値として解釈できるかどうかに応じて、ブール値のTrueまたはFalseを返します。実装には、try文とexcept文による例外処理の仕組みを活用します。isNumber()関数の実装例それでは、実際のコード例を見ていきましょう。# isNumber()関数の実装 def isNumber(s): if(s[0] == -): s = s[1:] # 例外処理 try:

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print