[Python-Dev] __del__ is not called after creating a new reference

Antoine Pitrou solipsis at pitrou.net
Mon Mar 20 16:23:59 EDT 2017


Hello Oleg,

On Mon, 20 Mar 2017 18:28:29 +0100
Oleg Nesterov <oleg at redhat.com> 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. It may then be called at a later time when this new
> 	reference is deleted.

This sentence is not technically wrong, but it can easily be
misleading.  It says "it *may* then be called at a later time" and
probably it should say "it may or may not be called at a later time,
depending on the Python implementation you are using".

Indeed CPython, the reference implementation, only calls __del__ once
and doesn't call it again on resurrected objects.  It is an
implementation detail, though, and other implementations are free to
behave otherwise, as garbage collectors are delicate beasts, difficult
to tame.

Regards

Antoine.




More information about the Python-Dev mailing list