Согласно официальной документации Python , вы можете заставить сборщика мусора для выпуска unreferenced памяти с помощью gc.collect(). Тем не менее, один известный случай, когда Python, безусловно, утечка памяти, - это когда вы объявляете круговые ссылки в объявлениях объектов и реализуете собственный метод джиттер-метода __del__ в одном из этих классов. Объекты, на которые ссылаются глобальные пространства имен модулей Python, не всегда освобождаются при выходе из Python. Это делает сборщик мусора Python (на самом деле не модуль gc, который является только интерфейсом Python для сборщика мусора). Таким образом, Python не обнаруживает и не освобождает ссылки на циркулярную память, прежде чем использовать сборщик мусора.
Python обычно освобождает большинство объектов, как только их число ссылок достигает нуля. В случае циклических ссылок это никогда не происходит, поэтому сборщик мусора периодически ходит по памяти и освобождает объекты с циркулярной ссылкой. Кроме того, невозможно забыть о свободной памяти, например, в C, но где-то можно оставить ссылку. Python, однако, агрессивно относится к очистке памяти при выходе и пытается уничтожить каждый отдельный объект.