在我的电脑调试器中运行类似这样的简单程序时:
int main(int argc, const char * argv[]) {
Py_Initialize();
PyObject* scipy_stats_module = PyImport_ImportModule("scipy.stats"); // importing "scipy.stats" module
Py_DecRef(scipy_stats_module);
if (Py_FinalizeEx() < 0) {
PyErr_Print();
exit(-1);
}
return 0;
}
我看到了scipy_stats_module
的ob_refcnt
属性,在它创建之后,在调用Py_DecRef
之前,被设置为3,而我希望它等于1。在
有人能帮我理解为什么会这样吗?这是我的代码有问题还是很正常?我应该打三次电话还是只打一次?在
谢谢你!在
另外,我用xcode8.3.3作为IDE和调试器,在我的macos10.12.5上运行
你不是新模块的唯一引用。在本例中,识别其他引用很简单—一个是
sys.modules['scipy.stats']
,一个是scipy
模块对象的stats
属性,一般来说,您不关心模块可能有哪些其他引用。在当您清除对模块的引用时,您应该只
Py_DECREF
一次,因为您只清除了一个引用,即您自己的引用。其他引用仍然存在,仍然需要在refcount中进行说明。在相关问题 更多 >
编程相关推荐