Как происходит кеширование строк в Python?

Недавно узнал, что питон тайно кеширует строки и числа. С числами вроде разобрался - кешируется [-5, 256], но насчет строк нашел только скудные "кешируюутся короткие строки". Хотелось бы узнать более конкретно условия кеширования.

Также интересно, что такое "interned strings"?
  • Вопрос задан
  • 2884 просмотра
Решения вопроса 1
@throughtheether
human after all
С числами вроде разобрался - кешируется [-5, 256], но насчет строк нашел только скудные "кешируюутся короткие строки". Хотелось бы узнать более конкретно условия кеширования.
В этом докладе (с 9 минуты) говорится, что, как правило, кэшируются строки длины в 1 байт и пустая строка. Думаю, это зависит от имплементации интерпретатора/VM.
Также интересно, что такое "interned strings"?
В моем представлении, это и есть кэшированная строка. Есть встроенная функция intern, возвращающая интернированный (кэшированный) вариант строки. Пример:
>>> sys.version
'2.7.6r3 Stackless 3.1b3 060516 (default, Apr 11 2014, 15:44:48) [MSC v.1500 32 bit (Intel)]'
, короткие строки кэшируются автоматически:
>>> s1==s2
True
>>> s1="toster"
>>> s2="toster"
>>> id(s1)==id(s2)
True
, длинные - нет:
>>> s3="ticking away the moments that make up a dull day"
>>> s4="ticking away the moments that make up a dull day"
>>> s3==s4
True
>>> id(s3)==id(s4)
False
, но их можно кэшировать принудительно:
>>> s5=intern("you fritter and waste the hours in an off-hand way")
>>> s6=intern("you fritter and waste the hours in an off-hand way")
>>> s5==s6
True
>>> id(s5)==id(s6)
True
>>>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы