__del__ is not called after creating a new reference

Oleg Nesterov oleg at redhat.com
Fri Mar 17 11:35:53 EDT 2017

On 03/17, Terry Reedy wrote:
> On 3/17/2017 10:54 AM, Oleg Nesterov wrote:
>> I started to learn python a few days ago and I am trying to understand what
>> __del__() actually does. https://docs.python.org/3/reference/datamodel.html
>> says:
>> 	object.__del__(self)
>> 	...
>> 	Note that it is possible (though not recommended!) for the __del__()
>> 	method to postpone destruction of the instance by creating a new
>> 	reference to it.
> If I understand the below, 'that persists after the function call'
> should be added.


> Note that the function call itself 'creates a new
> reference' by binding 'self' to the obj.

Well, not really if I have read this code correctly (quite possibly not),
PyObject_CallFinalizer() is called with the "artificial" ob_refcnt == 1
after it was already zero, and I am not sure call_unbound_noarg() binds
"self", but this doesn't mattter at all afaics.

> I suspect that this was added after the doc.  If git has an annotate
> function, you could check.

I did. And it is not clear to me if this behavioural change was intentional
or not. I don't have the sources right now so I can't tell you the commit id,
I can do this later when I return home.

I have python2.5 on my working laptop, the test-case works as documented.


More information about the Python-list mailing list