StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

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のほうが実行速度は早いと思われます.