python何时选择实习字符串

krz*_*hub 14 python string-interning

>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> r = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> q is r
False
Run Code Online (Sandbox Code Playgroud)

应该s1 is s2给多少个角色False?限制在哪里?即,我问在python开始制作单独的副本之前,字符串必须有多长.

Mat*_*ttH 13

字符串实习是特定于实现的,不应该依赖,如果要检查两个字符串是否相同,请使用相等性测试.

  • ......具体实施.这也是答案.谢谢. (3认同)

Spa*_*ost 11

如果你想因为一些奇怪的原因强制比较为真,那么使用实习函数:

>>> a = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>> b = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>> a is b
True

  • 出于某些奇怪的原因,很高兴知道. (5认同)
  • 另外,实习生与id一起移动到python 3000中的模块sys中.也很高兴知道. (2认同)
  • @Cris`intern()`至少从1.5版以来一直在Python中 (2认同)

mor*_*ang 5

这是关于 CPython 2.5.0 源文件 (stringobject.h) 中的 interned string 的一段注释

/* ... ... This is generally restricted to strings that **"look like" Python identifiers**, although the intern() builtin can be used to force interning of any string ... ... */
Run Code Online (Sandbox Code Playgroud)

因此,仅包含下划线、数字或字母的字符串将被保留。在您的示例中,q并且 ``r 包含;,因此它们不会被实习。