Почему Pythons PyObject_CallMethod увеличивает количество ссылок аргумента списка на 4? - PullRequest
2 голосов
/ 23 февраля 2012

Я относительно неопытен в Python. Я должен исправить ошибку в устаревшем программном обеспечении и застрял. Мы используем Python 2.6.6.

Проблема заключается в следующем:

В C ++ есть вызов:

PyObject_CallMethod( obj, "updateCallback", "(O)", list );

и (упрощенный) updateCallback в коде Python выглядит следующим образом:

def updateCallback(self, args):        
    print sys.getrefcount( args )

список является PyObject *, и перед CallMethod его refcount равен 1. Сразу после вызова updateCallback с использованием PyObject_CallMethod, оператор print в коде Python печатает 5. Когда PyObject_CallMethod возвращается, я вижу в отладчике, что «список» (AFAIK, который соответствует аргументам в updateCalback) все еще имеет refcount 5.

Теперь я понимаю, что использование (O) увеличивает количество ссылок на 1, но почему это 4 в моем случае?

Заранее спасибо

...