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