У меня недостаточно репутации, чтобы комментировать, поэтому добавляю в качестве ответа.
Как люди отлаживают утечки pyobject при использовании python-c-api?
Это то, что трудно сделать с обычными инструментами, такими как Valgrind, когда на экране появляется Python.
Также не рекомендуется вызывать Py_Finalize (), поскольку известно, что он имеет утечки памяти.Просто проще вызывать Py_Initialize () в начале вашего процесса и вызывать Py_Finalize () только тогда, когда вам абсолютно необходимо, т.е. когда ваш объект уничтожен в деструкторе или когда ваш процесс завершается.
см .: https://bugs.python.org/issue1445210
Что касается утечек памяти, вы должны понимать о новых, украденных и заимствованных ссылках и внимательно читать документацию по каждой вызываемой функции, чтобы знать, какой тип ссылки возвращается.
Если вы используете C ++, а не C, вам будет лучше использовать PyCXX или boost :: python или какую-либо другую оболочку C ++, которая использует RAII, чтобы позаботиться о пересчете для вас.
Надеюсь, это поможет.