关于语法:python:`is` 和`==`的区别

Python: Difference between `is` and `==`?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?

在python中,这两个语句之间的区别是什么:

if x is"odp":

if x =="odp":


==算子等价性检验

is关键字测试对象标识;我们是否谈论同一个对象。注意,多个变量可能引用同一个对象。


is运算符比较标识,而==运算符比较值。本质上,x is yid(x) == id(y)相同。


出于实现原因,"odp"是一个不好的例子,但是您不应该使用is,除非您希望两个相同字符串的可能值为false:

1
2
3
4
5
6
>>> lorem1 ="lorem ipsum dolor sit amet"
>>> lorem2 ="".join(["lorem","ipsum","dolor","sit","amet"])
>>> lorem1 == lorem2
True
>>> lorem1 is lorem2
False

正如其他人所说,是考验身份,而不是平等。在本例中,我有两个内容相同的独立字符串。但是,您也不应该依赖于这一点:

1
2
3
4
5
6
>>> odp1 ="odp"
>>> odp2 ="".join(["o","d","p"])
>>> odp1 == odp2
True
>>> odp1 is odp2
True

换句话说,您不应该使用的是比较字符串。

附笔。在python 2.7.10中,>>> odp1 is odp2返回false。


看到这里

The operators is and is not test for object identity: x is y is true if and only if x and y are the same object. x is not y yields the inverse truth value