isと==の違いのまとめ【Python】

pythonのisと==の違いの記事のアイキャッチPython

Pythonでis==があることは知っていたのですが、同じものと思って今まで使っていました
違うものということを最近知ったので、違いをまとめていきます

結論から!

isはオブジェクトのidが等しいかを調べる演算子
==はオブジェクトの値が等しいかを調べる演算子

isとは

isはオブジェクトのidが等しいかを調べる演算子です

オブジェクトは生成されるとそのオブジェクト固有のidを持つのですが、isはそのidを比較する

idを返してくれるid()はPythonのドキュメントで次のように説明されています

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

組み込み関数-Python https://docs.python.org/ja/3/library/functions.html#id

実際にオブジェクトのidを調べてみましょう

a = 12
print(id(a))
# 4362759520

b = 'what is id?'
print(id(b))
# 140438136540208

試しに同じ値を持っていても、違うオブジェクトであればisFalseになることを確認してみます

a1 = [1, 2, 3]
a2 = [1, 2, 3]

print(id(a1))
# 140438137695752
print(id(a2))
# 140438137695944
print(a1 is a2)
# False

==とは

==はオブジェクトの値が等しいかを調べる演算子です

a1 = [1, 2, 3]
a2 = [1, 2, 3]

print(id(a1))
# 140438137708616
print(id(a2))
# 140438136835208
print(a1 == a2)
# True

idが違うためオブジェクトとしては違うものですが、オブジェクトの値がどちらも[1, 2, 3]と等しいため==Trueという結果になります

コメント