Ответ 1
Интерпретация строк является специфичной для реализации, и на нее нельзя положиться, используйте тестирование равенства, если вы хотите проверить, что две строки идентичны.
>>> 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 начнет делать отдельные копии.
Интерпретация строк является специфичной для реализации, и на нее нельзя положиться, используйте тестирование равенства, если вы хотите проверить, что две строки идентичны.
Если вы хотите, по какой-то причудливой причине, заставить сравнение быть истинным, используйте функцию intern:
>>> a = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp') >>> b = intern('12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp') >>> a is b True
Вот фрагмент комментария о интернированной строке из исходного файла 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 содержат ;
, поэтому они не будут интернированы.