== 演算子と is 演算子

どっちも等しいかどうかの比較演算子だけど、簡単に言うと、== は値として等しいか(同値性)で、is はオブジェクトとして等しいか(同一性)の判定をする。だから次のようにaとbに別々に代入した場合では、値が等しくてもオブジェクトとしては等しくないので is での比較の結果は False になる。

>>> a = (1,2,3)
>>> b = (1,2,3)
>>> a == b
True
>>> a is b
False

id関数でオブジェクトのIDをみても、べつのオブジェクトだということがわかる。

>>> id(a)
5089160
>>> id(b)
4602696

一方で、bにaを代入した場合には、オブジェクトとしても等しいので、== でも is でも True になる。

>>> a = (1,2,3)
>>> b = a
>>> a == b
True
>>> a is b
True

ちなみに否定の場合は is not。

>>> a is b
True
>>> a is not b
False