Пороги в gc жесткие. Нужно понимать, что они означают.
Garbage collector срабатывает, если с момента последнего запуска gc.collect() количество созданных объектов превысило количество удалённых в конкретном поколении на пороговое значение.
Не количество объектов в поколении вообще, а именно разница между созданными и удаленными.
Да, кстати. В 3.3 есть занятная штука — docs.python.org/3/library/gc#gc.callbacks
Если для какого-то объекта количество ссылок становится равным нулю, он немедленно уничтожается.
А немедленно ли? Насколько мне известно, в современных сборщиках мусора делается несколько проходов и, например, в Java время реального уничтожения объекта не определено и конечно.
Устранение утечек памяти в приложении на Питоне