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

opt*_*per 2 python python-3.6

我在浏览Python 3数据类型时发现了一种奇特的行为,尤其是字符串.如果两个字符串a ,并b有那么相同的值a is bTrue(字符串不得包含连字符当然).

如果:

>>> a = 'string_without_hyphen'
>>> b = 'string_without_hyphen'
Run Code Online (Sandbox Code Playgroud)

然后:

>>> a is b
True
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)

但如果:

>>> a = 'string-with-hyphen'
>>> b = 'string-with-hyphen'
Run Code Online (Sandbox Code Playgroud)

然后,

>>> a is b
False
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)

这困惑了我.

为什么会这样?

AKX*_*AKX 6

因为 月亮光线和独角兽 实施细节.

is运营商的身份不是由内容进行比较的对象.

Python实现您正在使用可能或不可能决定重用上是相同的字符串对象ab,如果它感觉就像是,因为字符串在Python是不可改变的.整数也可能相同或不同(实际上,Integer如果它们足够小,这也会发生在Java的s中).

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

  • 正如你所说,实施细节.我认为字符串实习的规则并不是一成不变的.亲眼看看:比较`a ='string-with-hyphen'的输出; b ='string-with-hyphen'; print(a是b)`当它从py文件"执行"时,以及它在REPL中逐行执行时 (2认同)