У меня есть относительно большой словарь в Python и хотел бы иметь возможность не только удалять элементы из него, но и фактически возвращать память из этих исключений в моей программе. Я сталкиваюсь с проблемой, которая, хотя я удаляю элементы из словаря и даже запускаю сборщик мусора вручную, Python, похоже, не освобождает память.
Простой пример:
>>> 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
>>>
Я предполагаю, что происходит то, что, хотя записи удаляются и сборщик мусора запускается, Python не идет вперед и не изменяет размер словаря. Мой вопрос в том, есть ли какой-нибудь простой способ обойти это, или мне, вероятно, потребуется более серьезное переосмысление того, как я пишу свою программу?