2009/05/14

Pythonの'is'と'=='の違い

pythonを使っていて、以下のようなコードを書いてはまってしまいました。

#!/usr/bin/python
l,r = "x,yy".split(",")
print l == 'x'
print l is 'x'
print r == 'yy'
print r is 'yy'
この結果は次のようになり、'is'の挙動は文字1つの場合と複数ある場合とで異なります。
$ python is_equal.py
True
True
True
False

たぶん効率化を図るコードが、1文字の文字列オブジェクトを作る時にキャッシュからコピーして返すと思うのですが、まだpythonの実装を確認していません。

'=='と'is'比較演算子は動きが違って正解なのですが、簡単なコードで検証して動いたものを本番データでテストして発覚しました。
まぁ'is'周りがおかしい事はすぐにつき止められたし、'is'を使うのは間違いだとは思いますが、今回はまりまってしまいました。

0 件のコメント: