`is`和`==`的区别是什么?

6 投票
4 回答
779 浏览
提问于 2025-04-15 20:15

可能是重复的问题:
Python 中 ‘==’ 和 ‘is’ 比较字符串时,‘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),也就是说如果 xy 是同一个对象,它们的身份是一样的。

3

== 运算符用来检查两个东西是否相等。

is 关键字用来检查两个变量是否指向同一个对象;也就是说,我们在问这两个变量是不是指向同一个东西。要注意的是,多个变量可能会指向同一个对象。

撰写回答