Ответ 1
В этом случае, поскольку строки довольно короткие, и их так много, вы сохраняете справедливый бит памяти, используя intern
по строкам. Предполагая, что в строках есть только строчные буквы, 26 * 26 = 676 возможных строк, поэтому в этом списке должно быть много повторений; intern
гарантирует, что эти повторения не приведут к уникальным объектам, но все относятся к одному и тому же базовому объекту.
Возможно, что Python уже ставит короткие строки; но, глядя на несколько разных источников, кажется, что это сильно зависит от реализации. Поэтому вызов intern
в этом случае - это, вероятно, путь; YMMV.
Как вопрос о том, почему это очень вероятно, чтобы сохранить память, рассмотрите следующее:
>>> sys.getsizeof('')
40
>>> sys.getsizeof('a')
41
>>> sys.getsizeof('ab')
42
>>> sys.getsizeof('abc')
43
Добавление одиночных символов в строку добавляет только байт к размеру самой строки, но каждая строка занимает 40 байтов сама по себе.