Python: オブジェクトのIDを調べる id()
Pythonではすべてのオブジェクトに自動的に管理用のID(identity)が 割り振られます。オブジェクトのIDを調べたい場合は、 id()関数を使用します。
id(オブジェクト)
ID番号はオブジェクトごとに振られ、 値は整数値です。
a = 100 b = 20 print(id(a)) # 140706965663216 print(id(b)) # 140706965660656
ID番号が同じになるケース
変数に別の変数を代入する場合は、 参照先が同じになるのでID番号も同じになります。
次のコードでは、変数aと変数bのID番号は同じです。
a = 100 b = a print(id(a)) # 140706965663216 print(id(b)) # 140706965663216
変更不可の文字列型の値を変更した場合
Pythonでは文字列型はイミュータブル(変更不可)です。 ですが次のように「s = "a"」の次に「s = "b"」と記述することで変更できます。
s = "a" s = "b"
「変更不可のはずなのに、変更できてしまう・・・」これはどういうことでしょうか?
これは値を変更するたびに別のオブジェクトIDが割り当てられているからです。
s = "a" print(id(s)) # 2113170107568 s = "b" print(id(s)) # 2113170091888
上のコードからわかるように、
変数のIDを調べたところ、同じ変数sでも「s = "a"」の後と、
「s = "b"」の後ではIDが異なっています。
つまり別のオブジェクトです。
コード上は文字列が格納されている変数sの値が変更できるように見えますが、
実際は新しくオブジェクトが作成されています。