我在浏览Python 3数据类型时发现了一种奇特的行为,尤其是字符串.如果两个字符串a ,并b有那么相同的值a is b变True(字符串不得包含连字符当然).
如果:
>>> 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)
这困惑了我.
为什么会这样?
因为 月亮光线和独角兽 实施细节.
该is运营商的身份不是由内容进行比较的对象.
Python实现您正在使用可能或不可能决定重用上是相同的字符串对象a和b,如果它感觉就像是,因为字符串在Python是不可改变的.整数也可能相同或不同(实际上,Integer如果它们足够小,这也会发生在Java的s中).
要点是:永远不要使用,is除非你确实需要身份(地址)比较; 事情可能很奇怪.请==改用.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |