python の is と == は別物

a is b

a is bは aとbが同じオブジェクトを参照している場合にのみTrueを返す。

a == b

a == b は__eq__などのメソッドを通して型変換が行われて比較がされる

憶えておくべきこととしては

  • 通常の比較は == を使用する。
  • ただし、Noneと比較を行う際には高速な is を使用する*1

ということ。

ふぇー。

http://www.python.jp/doc/2.5/ref/comparisons.html

*1: None は Noneタイプのオブジェクトを参照しているので Noneなオブジェクトとisで比較するときちんとTrueが返るため