python何时选择实习字符串

时间:2012-05-16 16:11:30

标签: 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

s1 is s2False的字符数应该多少?限制在哪里?即,我问在python开始制作单独的副本之前,字符串必须有多长。

3 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:4)

以下是关于来自CPython 2.5.0源文件(stringobject.h)的实习字符串的注释

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

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