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

2017年3月20日 14:32:11 -0700

On Mar 20, 2017 1:26 PM, "Antoine Pitrou" <[email protected]> wrote:
Hello Oleg,
On 2017年3月20日 18:28:29 +0100
Oleg Nesterov <[email protected]> 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
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to