为什么连字符(-)在python字符串中表现特别?

时间:2018-08-30 10:42:13

标签: python python-3.6

我在检查Python 3数据类型(尤其是 string )时发现了一种特殊的行为。如果两个字符串ab的值相同,则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

这让我感到困惑。

为什么会这样?

1 个答案:

答案 0 :(得分:6)

因为月亮和独角兽的实施细节。

is运算符通过身份而不是内容来比较对象。

您使用的Python实现可能会或可能不会决定为ab重用相同的字符串对象,因为字符串在Python中是不可变的。整数可能会或不会发生相同的事情(事实上,如果Java的Integer足够小,也会发生这种情况。)

要点是:除非您确实需要身份(地址)比较,否则请不要使用is;事情可能很奇怪。请改用==