我在检查Python 3数据类型(尤其是 string )时发现了一种特殊的行为。如果两个字符串a
和b
的值相同,则a is b
会变成True
(当然,字符串中不得包含连字符)。
如果:
>>> a = 'string_without_hyphen'
>>> b = 'string_without_hyphen'
然后:
>>> a is b
True
>>> a == b
True
但是如果:
>>> a = 'string-with-hyphen'
>>> b = 'string-with-hyphen'
然后
>>> a is b
False
>>> a == b
True
这让我感到困惑。
为什么会这样?
答案 0 :(得分:6)
因为月亮和独角兽的实施细节。
is
运算符通过身份而不是内容来比较对象。
您使用的Python实现可能会或可能不会决定为a
和b
重用相同的字符串对象,因为字符串在Python中是不可变的。整数可能会或不会发生相同的事情(事实上,如果Java的Integer
足够小,也会发生这种情况。)
要点是:除非您确实需要身份(地址)比较,否则请不要使用is
;事情可能很奇怪。请改用==
。