python什么时候选择对字符串进行实习

python什么时候选择对字符串进行实习,python,string-interning,Python,String Interning,s1为s2时应包含多少个字符?限制在哪里?也就是说,我在问一个字符串必须有多长时间,python才能开始单独复制它。字符串内部处理是特定于实现的,不应该依赖它,如果您想检查两个字符串是否相同,请使用相等测试。如果您愿意,出于某种奇怪的原因,要强制比较为真,请使用intern函数: >>> s1 = "spam" >>> s2 = "spam" >>> s1 is s2 True >>> q = 'asdalksdjfla;k

s1为s2时应包含多少个字符?限制在哪里?也就是说,我在问一个字符串必须有多长时间,python才能开始单独复制它。

字符串内部处理是特定于实现的,不应该依赖它,如果您想检查两个字符串是否相同,请使用相等测试。

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

>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> r = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> q is r
False
>>>a=实习生('123456780123456789012134567890QAZWSXedcrfvtgbyhnujmikolp') >>>b=实习生('123456780123456789012134567890QAZWSXedcrfvtgbyhnujmikolp') >>>a是b 真的
下面是一段关于CPython 2.5.0源文件(stringobject.h)中的interned string的注释


因此,字符串只包含下划线、数字或字母。在您的示例中,
q
和``r包含
,这样他们就不会被拘留。

你是在问一个字符串需要多长时间,python才能开始制作它的单独副本吗?它完全依赖于实现,在下一个版本的python中可能会在没有警告的情况下更改。你为什么想知道?是的,我是在问一个字符串需要多长时间python才能开始制作它的单独副本。我只是想知道。我不知道这并不重要,而且非常灵活。如果我只进行测试,我将永远不会知道这是依赖于实现的…特定于实现的。这也是答案。谢谢。@Cris作为一个具体的例子,以及1000个字符的eval构造字符串。它给了我更多的知识和更多的问题,byt它是可以的。所以从来没有一个合法的用例供用户测试
s1 is s2
?出于一些奇怪的原因,很高兴知道。另外,实习生和id一起被转移到python 3000中的模块sys中。也很高兴知道。出于某些原因,最重要的是。你能告诉我只有python 3000玩具吗?@Cris
intern()
至少从版本1.5intern在根命名空间中开始就在python中。 >>> a = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp') >>> b = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp') >>> a is b True
/* ... ... This is generally restricted to strings that **"look like" Python identifiers**, although the intern() builtin can be used to force interning of any string ... ... */