Это старая ошибка, которая была исправлена для некоторых типов в Python 2.5. То, что происходило, было то, что python не был так хорош в сборе таких вещей, как пустые списки / словари / tupes / floats / ints. В Python 2.5 это было исправлено ... в основном. Однако плавающие и целые числа являются синглетонами для сравнения, поэтому после создания одного из них он остается в течение всего времени, пока переводчик жив. Меня укусило это худшее, когда я имел дело с большим количеством поплавков, так как они имеют неприятную привычку быть уникальными. Это было охарактеризовано для Python 2.4 и обновлено о том, что оно складывается в python 2.5
Лучший способ, который я нашел, - это обновить до python 2.5 или новее, чтобы решить проблему списков / словарей / кортежей. Для чисел единственное решение состоит в том, чтобы не допустить попадания большого количества чисел в питон. Я сделал это с помощью своей собственной оболочки для объекта c ++, но у меня сложилось впечатление, что numpy.array даст аналогичные результаты.
Как пост-скрипт, я понятия не имею, что случилось с этим в Python 3, но я подозреваю, что числа по-прежнему являются частью единого числа. Так что утечка памяти на самом деле является особенностью языка.