Cargando el archivo de 41MB por ast.literal_eval hace que MemoryError

¿Cómo analizar un archivo grande usando ast.literal_eval sin causar MemoryError? Por ejemplo, el archivo que quiero analizar es de 41MB.

Observé el proceso y descubrí que Python tomó más de la memoria 3G. Estoy usando un sistema de 32 bits, por lo que depende de la memoria máxima del proceso.

¿Por qué ast.literal_eval toma tanta memoria como solo analiza para obtener la estructura de datos? ¿Hay alguna manera de reducir el uso de la memoria?

Por cierto, el código es:

import ast
file = open(file_name, 'r')
data = ast.literal_eval(file.read())
file.close()

la excepción es

  File "/usr/local/lib/python2.7/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/local/lib/python2.7/ast.py", line 37, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
MemoryError

¡Gracias!