>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
似乎a is b
被或多或少定義爲id(a) == id(b)
。這樣很容易出錯:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
一些fnames意外地在else塊中結束。修正很簡單,我們應該使用ext == '.mp3'
來代替,但表面上的if ext is '.mp3'
看起來像是一種很好的pythonic方法來編寫它,它比「正確」的方式更具可讀性。
由於字符串是不可變的,它的錯誤原因是什麼?什麼時候更好地檢查身份?什麼時候平等檢查更好?
*相關:* [Python'=='vs'是'比較字符串','有時會失敗,爲什麼?](http://stackoverflow.com/questions/1504717/python-vs-is -comparing-strings-is-fails-sometimes-why) –
可能的重複[何時\'== \'操作符不等同於\'is \'操作符? (Python)](http://stackoverflow.com/questions/3647692/when-is-the-operator-not-equivalent-to-the-is-operator-python) – user
相關:http://stackoverflow.com/ a/2577589/674039 – wim