Tengo un diccionario relativamente grande en Python y me gustaría poder no solo eliminar elementos de él, sino que realmente recuperar la memoria de estas eliminaciones en mi programa. Me encuentro corriendo a través de un problema por el cual, aunque elimino elementos del diccionario e incluso ejecuto el recolector de elementos no utilizados manualmente, parece que Python no está liberando la memoria.Recuperación de memoria de Python después de eliminar elementos en un diccionario
Un ejemplo sencillo de esto:
>>> tupdict = {}
# consumes around 2 GB of memory
>>> for i in xrange(12500000):
... tupdict[i] = (i,i)
...
# delete over half the entries, no drop in consumed memory
>>> for i in xrange(7500000):
... del tupdict[i]
...
>>> import gc
# manually garbage collect, still no drop in consumed memory after this
>>> gc.collect()
0
>>>
Me imagino lo que está sucediendo es que, aunque las entradas se eliminan y ejecución recolector de basura, Python no seguir adelante y cambiar el tamaño del diccionario. Mi pregunta es, ¿hay alguna manera simple de evitar esto, o es probable que necesite un replanteamiento más serio sobre cómo escribo mi programa?
¿Cómo se mide el consumo de memoria? – stonemetal
Nada sofisticado: monitor del sistema en Ubuntu –
Ejecutar 'gc.collect()' en Python 2.6.5 en Windows XP SP3 parece liberar aproximadamente el 50% de la memoria –