pythonにある同じものかどうかを判断する方法は二つありますね。==とisです。戻り値はいずれもBooleanですが、それでは何が違うのか?というとことは気になるところです。
結論
簡単にいうと、isは両者のメモリローケーションを比較しているのに対し、==は単純に両者は同じ値であるかを見ています。それだけです。
例えば?
じゃコードを見てみて(ターミナルにてpython3を立ち上げる)
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True
解説します。aにリストを代入、bにも同じくaを代入すると、同じメモリローケーションから引用していることがわかります。従い、これはisを使うとTrueです。
次に文字列操作の[:]を使ってリストを複製します。そうすると、コピーが出来上がるので、メモリ上は別物になります。従って、これはFalse。ということです。
実際にidを見てみると
>>> id(a)
4364243328
>>>
>>> id(b)
4364202696
そうですよね。Falseになっていることから、idが異なるのは当然の話。
しかし、以下のコードのような例外があります。
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>>
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
これは何を意味しているのかね?aとbは別々に数字を代入しているのに、上と下は結果が違うぞ。
さて解説するよ。
pythonはパフォーマンス改良のため、256などの小さい整数について違う処理をしています。そういった特別な整数は同じidで同じ場所へと格納しているそうです。そうすると、このように256ではisを使っても==を使っても同じTrueとなり、1000のような大きい数字についてはそうはなりません。
ということでした。いかがでしょうか。
ご指摘ありましたら、どうぞ突っ込んでください。
さてまたね