2014-02-12 7 views
0

Этот код загрузит 10000 экземпляров строк (с одинаковым содержанием):Python строки и памяти оптимизации

lst = [] 
for i in xrange(0, 10000): 
    with open ('data.txt', 'r') as datafile: 
     lst.append(str(datafile.read())) 
print(lst) 

только путем добавления кода до или после один из приведенных выше, я wan't иметь то же самое результат как это.

lst = [] 
with open ('data.txt', 'r') as datafile: 
    s = str(datafile.read()) 
    for i in xrange(0, 10000): 
     lst.append(s) 
print lst 

Это загрузит всего 1 экземпляр строки. => Меньше использования памяти.

В java есть String.intern()? Я ищу эквивалент python.

ответ

1

Чтобы сделать то же самое, вы можете использовать intern().

Введите строку в таблице «интернированные» строки и возвращает интернирована строку - которая строки сами или копия. Внутренние строки полезны для получения небольшой производительности при поиске в словарях - если ключи в словаре интернированы, а ключ поиска интернирован, сопоставление ключей (после хэширования) может быть выполнено с помощью сравнения указателей вместо сравнения строк. Обычно имена, используемые в программах Python, автоматически интернированы, а словари, используемые для хранения атрибутов модуля, класса или экземпляра, имеют интернированные ключи.

магазин возвращаемое значение:

lst = [] 
for i in xrange(0, 10000): 
    with open ('data.txt', 'r') as datafile: 
     lst.append(intern(datafile.read())) 
print(lst) 
+0

Я не могу понять, я не нашел это раньше, это же имя, как и в Java :) – Toilal

1

В Java есть String.intern()? Я ищу эквивалент python.

В Python это называется intern(), и это встроенная функция.

Для дальнейшего обсуждения см Python string interning

Смежные вопросы