auの日記

プログラミング初心者の日記。(auはハンドルネームです)

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になっていることが分かりました。

参考