Decrementing of reference count of new objects?
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Tue Apr 1 21:20:38 EDT 2008
En Tue, 01 Apr 2008 18:49:28 -0300, Mitko Haralanov <mitko at qlogic.com>
escribió:
> For the most part, I understand the theory behind reference counting in
> Python C code. But there is one thing that I am confused about and I
> have not been able to clear it up.
>
> Let say that you have the following function (over-simplified):
>
> PyObject *do_work (PyObject *self, PyObject *args) {
> PyObject *new_obj;
> new_obj = PyDict_New ();
> return new_obj;
> }
>
> What I don't get is whether I have to decrement the reference to
> new_obj before I return it. I know that function that return object are
> giving away the reference but I am still confused.
PyDict_New returns a new reference (check section 7.4.1 in the API
Reference), so do_work "owns" that reference. Functions that are intended
to be called from Python code must return an owned reference to some
PyObject* (see section 1.10.2 Ownership Rules, in the Extending/Embedding
reference) (yes, these things are scattered all over the place...)
Since do_work has to return an owned reference, it can't decrement it. In
this example it's rather clear because the *only* reference to the newly
created dict is hold by the function, and decrementing it would destroy
the dictionary.
--
Gabriel Genellina
More information about the Python-list
mailing list