Pythonでのis演算子と'=='演算子の違い
is演算子と'=='演算子の違いですが,いろいろ書かれてはいるものの,端的にいえば,「isは同じインスタンスをさしているかどうか,==は__eq__がTrueを返すかどうか」の比較になります.
数値の例がわかり易かったのですが,
a = 2 b = 1+1; print a is b print a == b;
これは,以下のようになります.
True True
では同じように,以下はどうなるか.
a = 1000 b = 10 * 10 * 10 print a is b print a == b
これは,以下のようになります.
False True
Pythonでは,小さな数値オブジェクトは初期に生成してもっているため,最初の例ではis演算子は==演算子と同じものを返しますが,数値が大きくなると,インスタンスを別別につくるようなので,isと==は異なる値を返します.
従って,直感的な’同値’を知りたければ,==演算子を使い,is演算子は動きを正しく理解している場合にのみ使った方が良いですね.ちなみに,__eq__演算子を実装したオブジェクトの比較であれば,必ず==を使いましょう.Noneのようにシングルトンの比較ならisでOKですね.もちろん,アドレスの比較なのでisのほうが実行速度は早いと思われます.