Как получить счетчик ссылок PyObject?

Как получить ссылочный счетчик PyObject из С++?

Существуют функции Py_INCREF и Py_DECREF, которые увеличивают/уменьшают его, но я не нашел никакой функции, возвращающей счет ссылки объекта.

Мне нужно это для целей отладки.

Ответ 1

Счетчик ссылок каждого и каждого объекта хранится в самой PyObject, в переменной под названием ob_refcnt. Вы можете напрямую получить доступ к этому.

typedef struct _object {
    _PyObject_HEAD_EXTRA
    Py_ssize_t ob_refcnt;          # Reference count
    struct _typeobject *ob_type;
} PyObject;

В качестве альтернативы вы можете использовать Py_REFCNT Macro.