Pythonのisと==の違いについて調べてみた
auです。
Pythonで比較をする際に、値同士なら「==」boolなら「is」という風に使っていました。
なんでかなーと思ったので、今回調べてみました。
==
==は、変数の値を比較しています。そのまんまですね。
a = 1 b = 1 print(a == b) # True
is
isは、インスタンスに振られているidが一緒かどうか判断しています。
インスタンスは、簡単にいうと変数やクラスの作られる実物のことです。普通に宣言する変数も「インスタンス変数」と呼ばれています。
実際に書いてみると
a = 1 b = 1 c = 2 print(id(a)) # 4416734512 print(id(b)) # 4416734512 print(id(c)) # 4416734544 print(a is b) # True print(a is c) # False print(id(True)) # 4416330736 print(id(False)) # 4416330768 print((a is b) is True) # True print((a is c) is True) # False
値が一緒だとidも一緒と分かりますね。変数ごとというよりも、値ごとにidが振られているような印象を持ちました。
bool型にもそれぞれidが与えられており、返り値がTrueの場合はそのidになっていることが分かりました。