Python:为什么(“hello”是“hello”)计算为True?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (143)

为什么"hello" is "hello" == True用Python?

如果两个字符串文本相等,则将它们放置到相同的内存位置。字符串是一个不可变的实体。不会造成任何伤害。

那么,每个Python字符串都有一个也是唯一的一个内存位置?听起来很奇怪。这是怎么回事?

提问于
用户回答回答于

Python(如Java、C、C++、.NET)使用字符串池/实习生。解释器意识到“hello”与“hello”相同,因此它优化并使用了内存中的相同位置。

另一个好主意是:“hell”+“o”是“Hello”==>True

用户回答回答于

那么,每个Python字符串都有一个也是唯一的一个内存位置?

不,只有解释器决定进行优化,这是一个基于策略的决策,该策略不是语言规范的一部分,并且可能在不同的CPython版本中发生变化。

在我的安装(2.6.2Linux)上:

>>> 'X'*10 is 'X'*10
True
>>> 'X'*30 is 'X'*30
False

同样,国家统计局:

>>> 2**8 is 2**8
True
>>> 2**9 is 2**9
False

因此,不要依赖“String”是“String”:即使仅仅看C实现,也是不安全的。

扫码关注云+社区

领取腾讯云代金券