On Mar 20, 2017 1:26 PM, "Antoine Pitrou" <solipsis@pitrou.net> wrote:

Hello Oleg,

On Mon, 20 Mar 2017 18:28:29 +0100
Oleg Nesterov <oleg@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".

Modern CPython, and all extant versions of PyPy and Jython, guarantee that __del__ is called at most once. MicroPython doesn't support user-defined __del__ methods.

It's fine if the text wants to leave that open, but the current phrasing is pretty misleading IMO. I also read it as saying that __del__ would be called again if the object is collected again (which may or may not happen). But AFAICT there are actually zero implementations where this is true. Probably worth a small edit :-)

-n