奇怪的是:
>>> 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
一些 fname 意外地出现在 else block 中。解决方法很简单,我们应该使用 ext == '.mp3'
代替,但表面上看来 if ext is '.mp3'
似乎是一个不错的 Pythonic 方式写这个,它比“正确”的方式更具可读性。
既然字符串是不可变的,那么它为什么会出错的技术细节是什么?什么时候身份检查更好,什么时候平等检查更好?
最佳答案
它们本质上是不同的。
==
通过调用__eq__
方法进行比较is
当且仅当两个引用指向同一个对象时才返回 true
所以与说 Java 相比:
is
与对象的==
相同==
与对象的equals
相同
关于python - 什么时候用==,什么时候用is?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570371/