gpt4 book ai didi

python - Py_DECREF 和 PY_INCREF 的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:16:58 25 4
gpt4 key购买 nike

我正在学习在 python 中定义“新类型”的教程,https://docs.python.org/2/extending/newtypes.html ,我不明白在这段代码中使用 Py_DECREF 的目的。

static PyObject *
Noddy_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
Noddy *self;

self = (Noddy *)type->tp_alloc(type, 0);
if (self != NULL) {
self->first = PyString_FromString("");
if (self->first == NULL)
{
Py_DECREF(self);
return NULL;
}

self->last = PyString_FromString("");
if (self->last == NULL)
{
Py_DECREF(self);
return NULL;
}

self->number = 0;
}

return (PyObject *)self;
}

我对引用计数的理解不完整,如有任何帮助,我们将不胜感激。

最佳答案

在这种情况下,Py_DECREF 将简单地释放使用 tp->alloc 分配的内存。

tp->alloc 将引用计数设置为 1。Py_DECREF 将引用计数从 1 减少到 0;当它发现引用计数为 0 时,它会调用适当的函数来释放内存(在本例中为 Noddy_dealloc。)

如果 python C api 函数返回 NULL,则说明出了问题;通常会设置一个异常(保存在全局变量中)。

如果调用者再次返回 NULL,则异常被链接,因此“返回 NULL”。

关于python - Py_DECREF 和 PY_INCREF 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com