`is` 和 `==` 有什么区别?

6

3
题目:Python中,使用"is"运算符进行字符串比较时为什么有时会失败?回答:在Python中,使用"is"运算符用于检查两个对象是否指向同一个内存地址。当比较简短的字符串时,由于Python的优化机制,在内存中只创建了一个字符串对象,因此"is"运算符会返回True。但是,在比较较长的字符串时,Python不会对其进行优化,会在内存中创建多个不同的对象,此时使用"is"运算符比较则会返回False。正确的方法是使用"=="运算符进行值比较。 - SilentGhost
1
@SilentGhost 我不同意。链接的问题包含了这个问题的答案,但对于那些正在寻找相对简单的答案的人来说,链接的问题看起来并不完全相同。 - David Berger
@David:而且关于 simple 的问题已经被问过了(而且是最近,呵呵),你可以自由地花时间去找到它的位置,我的看法是具有相同答案的问题是重复的。 - SilentGhost
4个回答

3
== 操作符用于测试相等性。 is 关键字用于测试对象的身份;即我们是否在谈论同一个对象。请注意,多个变量可能引用同一个对象。

2
< p > is 运算符比较对象的身份标识,而 == 运算符比较对象的值。实际上,x is y 等同于 id(x) == id(y)


1
出于实现原因,“odp”是一个不好的例子,除非您希望两个相同的字符串的可能性计算为false,否则不应该使用它:
>>> lorem1 = "lorem ipsum dolor sit amet"
>>> lorem2 = " ".join(["lorem", "ipsum", "dolor", "sit", "amet"])
>>> lorem1 == lorem2
True
>>> lorem1 is lorem2
False

正如其他人所说,它测试的是身份而不是相等性。在这种情况下,我有两个内容相同的独立字符串。然而,你也不应该依赖于这一点:

>>> odp1 = "odp"
>>> odp2 = "".join(["o", "d", "p"])
>>> odp1 == odp2
True
>>> odp1 is odp2
True 

换句话说,你永远不应该使用is来比较字符串。
附注: 在Python 2.7.10中,>>> odp1 is odp2返回False。

0

请点击这里

isis not运算符用于测试对象的身份:当且仅当x和y是同一个对象时,x is y为真。x is not y则产生相反的真值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接