Pythonでis
と==
があることは知っていたのですが、同じものと思って今まで使っていました
違うものということを最近知ったので、違いをまとめていきます
結論から!
is
はオブジェクトのidが等しいかを調べる演算子==
はオブジェクトの値が等しいかを調べる演算子
isとは
is
はオブジェクトのidが等しいかを調べる演算子です
オブジェクトは生成されるとそのオブジェクト固有のidを持つのですが、is
はそのidを比較する
idを返してくれるid()
はPythonのドキュメントで次のように説明されています
オブジェクトの “識別値” を返します。この値は整数で、このオブジェクトの有効期間中は一意かつ定数であることが保証されています。有効期間が重ならない 2 つのオブジェクトは同じ
組み込み関数-Python https://docs.python.org/ja/3/library/functions.html#idid()
値を持つかもしれません。
実際にオブジェクトのidを調べてみましょう
a = 12
print(id(a))
# 4362759520
b = 'what is id?'
print(id(b))
# 140438136540208
試しに同じ値を持っていても、違うオブジェクトであればis
でFalse
になることを確認してみます
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
という結果になります
コメント