14
>>> 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 s2给出多少个字符False?极限在哪里?即我在问一个字符串在python开始制作它的单独副本之前需要多长时间。

4

3 回答 3

13

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

于 2012-05-16T16:15:00.750 回答
12

如果您想出于某种奇怪的原因强制比较为真,请使用 intern 函数:

>>> a = 实习生('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>> b = 实习生('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp')
>>> a 是 b
真的
于 2012-05-16T16:19:23.097 回答
5

这是一条关于 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 包含;,因此它们不会被拘留。

于 2014-05-09T04:01:02.807 回答