С числами вроде разобрался - кешируется [-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
>>>