`is`和`==`的区别是什么?
在 Python 中,这两句代码有什么区别:
if x is "odp":
if x == "odp":
4 个回答
1
因为一些实现上的原因,“odp”这个例子并不好,但你不应该使用is,除非你想让两个完全相同的字符串比较时结果为假:
>>> lorem1 = "lorem ipsum dolor sit amet"
>>> lorem2 = " ".join(["lorem", "ipsum", "dolor", "sit", "amet"])
>>> lorem1 == lorem2
True
>>> lorem1 is lorem2
False
正如其他人所说,is是用来测试身份的,而不是相等性。在这个例子中,我有两个内容相同的字符串。但你也不应该依赖这个:
>>> odp1 = "odp"
>>> odp2 = "".join(["o", "d", "p"])
>>> odp1 == odp2
True
>>> odp1 is odp2
True
换句话说,你绝对不应该用is来比较字符串。
附注:在Python 2.7.10中,>>> odp1 is odp2
的结果是False。
2
is
操作符用来比较两个对象的身份,也就是它们是不是同一个东西;而 ==
操作符则用来比较两个对象的值,也就是它们的内容是否相同。简单来说,x is y
就等于 id(x) == id(y)
,也就是说如果 x
和 y
是同一个对象,它们的身份是一样的。
3
==
运算符用来检查两个东西是否相等。
is
关键字用来检查两个变量是否指向同一个对象;也就是说,我们在问这两个变量是不是指向同一个东西。要注意的是,多个变量可能会指向同一个对象。