可能重复:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python:`is`和`==`之间的区别?
在Python,就是这两个语句之间的区别:
if x is "odp":
if x == "odp":
可能重复:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?Python:`is`和`==`之间的区别?
在Python,就是这两个语句之间的区别:
if x is "odp":
if x == "odp":
平等
is
的关键字试验对象身份的==
操作试验;无论我们是在谈论同一个对象。请注意,多个变量可能指向同一个对象。
is
运算符比较标识,而==
运算符比较该值。基本上x is y
相同id(x) == id(y)
参见here
运算符是和不测试对象标识:x是当且仅当x和y是相同的对象y是真实的。 X不是Ÿ产生逆真值
由于实现的原因,“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。
dupe http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – SilentGhost 2010-03-10 18:11:10
@SilentGhost我不同意。链接的问题包含了这个问题的答案,但是对于任何人都在寻找一个相对简单的答案来回答这个问题,这个问题看起来并不一样。 – 2010-03-10 18:30:26
@大卫:简单的问题已经被问到(最近也是),你可以自由地花费你的时间来找到它的位置,在我的书中有相同答案的问题是重复的。 – SilentGhost 2010-03-10 18:40:22