Python
python3

pythonにおける「==」と「is」の違いについて

More than 1 year has passed since last update.

 はじめに

オブジェクト同士を比較する方法として「==」と「is」があるが使い分けがイマイチ分からなかったので違いをまとめてみた。

「==」について

オブジェクト1とオブジェクト2が等価か比較する。等価とは「同じ値を持っているか」と言う意味。

test01.py
object1=100
object2=100

if object1 == object2 :
    print("等価である")
else :
    print("等価ではない")

#出力:等価である

test01.pyではobject1とobject2は同じ値(int型の100)を持っているためif文はTrueと評価。

test02.py
object1=100    #int型の100
object2="100"  #str型の100

if object1 == object2 :
    print("等価")
else :
    print("等価ではない")

#出力:等価ではない

test02.pyでは「int型の100」と「str型の100」を比較しているためif文はFalseと評価。

「is」について

「is」は比較したオブジェクトが「同一のオブジェクトかどうか」を調べる。

test3.py
object1=[1,2,3]
object2=[1,2,3]

print(object1 is object2)
print(object1 is object1)

#出力
#False
#True

オブジェクトを生成するとそのオブジェクトにid番号(ユニークな番号)が振られる。「is」はこのidを比較して同一のオブジェクトかを調べている。id番号はidメソッドで調べられる。

test04.py
object1=[1,2,3]
object2=[1,2,3]

print(id(object1))    #id()でそのオブジェクトのid番号調べる
print(id(object2))

print(object1 is object2)
print(object1 is object1)

#出力
#4488767496    (object1のid番号)
#4488768392    (object2のid番号)
#False
#True

※id番号は環境によって異なる。

まとめ

「==」は比較されたオブジェクトが等価か調べる。
「is」は比較されたオブジェクトのidが等価か調べる。