2010-03-10 126 views
5

可能重复:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python:`is`和`==`之间的区别?

在Python,就是这两个语句之间的区别:

if x is "odp":

if x == "odp":

+3

dupe http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – SilentGhost 2010-03-10 18:11:10

+1

@SilentGhost我不同意。链接的问题包含了这个问题的答案,但是对于任何人都在寻找一个相对简单的答案来回答这个问题,这个问题看起来并不一样。 – 2010-03-10 18:30:26

+0

@大卫:简单的问题已经被问到(最近也是),你可以自由地花费你的时间来找到它的位置,在我的书中有相同答案的问题是重复的。 – SilentGhost 2010-03-10 18:40:22

回答

4

平等

is的关键字试验对象身份的==操作试验;无论我们是在谈论同一个对象。请注意,多个变量可能指向同一个对象。

2

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

0

参见here

运算符测试对象标识:x是当且仅当x和y是相同的对象y是真实的。 X不是Ÿ产生逆真值

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 

换句话说,你应该永远使用是比较字符串。

P.S. 在Python 2.7.10 >>> odp1 is odp2返回False。

相关问题