Использование памяти словаря Python

Я работал над проектом, который включает загрузку относительно большого словаря в память из файла. Словарь имеет менее 2 миллионов записей, каждая запись (ключ и значение в сочетании) составляет менее 20 байт. Размер файла на диске составляет 38 МБ.

Моя проблема в том, что когда я пытаюсь загрузить словарь, моя программа сразу же расширяет до 2,5 гигабайт используемой памяти.

Вот код, который я использую для чтения словаря с диска:

f = open('someFile.txt', 'r') rT = eval(f.read()) f.close() 

Я думаю, что память используется для синтаксического анализа синтаксиса словаря AST.

Для такого использования гораздо лучше, если вы переходите на модуль cPickle вместо использования функции repr / eval .

 import cPickle x = {} for i in xrange(1000000): x["k%i" % i] = "v%i" % i cPickle.dump(x, open("data", "wb"), -1) x = cPickle.load(open("data", "rb")) 

-1 когда демпинг означает использование последнего протокола, который более эффективен, но, возможно, не обратно совместим со старыми версиями python. Если это хорошая идея или нет, зависит от того, почему вам нужно сбросить / загрузить.

Это может быть немного не по теме, но также может чрезвычайно помочь с использованием выражений генератора при работе с большими файлами / потоками данных.

Эта дискуссия объясняет это очень хорошо, и эта презентация изменила то, как я писал свои программы.