使用Python 2.x中的'is'运算符将对象与空元组进行比较

gur*_*lex 8 python

if obj is None:以前在Python 看过,我最近遇到过 if obj is ():.由于元组不可变,因此在Python解释器中听起来像是一个合理的内部优化,因为空元组是单个元素,因此允许使用is而不是要求==.但这有保证吗?从哪个版本的翻译?

[编辑]问题很重要因为if()不是单例并且有一种方法可以生成一个具有不同地址的空元组,那么使用is {}就是一个bug.如果仅在Python 2.x之后保证x> 0,那么如果需要确保代码的向后兼容性,则必须知道x的值.在使用pypy/jython/ironpython时,知道这是否会破坏你的代码也很重要...

Ste*_*ski 11

从Python 2 文档和Python 3 文档:

...两次出现的空元组可能会也可能不会产生相同的对象.

换句话说,你不能指望() is ()评价为真.