Hi Armin,
On 25.08.2015 13:00, Armin Rigo wrote:
Hi Valentine,
On 25 August 2015 at 09:56, Valentine Sinitsyn
<valentine.sinit...@gmail.com> wrote:
Yes, I think so. There is a *highly obscure* corner case: __del__
will still be called several times if you declare your class with
"__slots__=()".
Even on "post-PEP-0442" Python 3.4+? Could you share a link please?
class X(object):
__slots__=() # <= try with and without this
def __del__(self):
global revive
revive = self
print("hi")
X()
revive = None
revive = None
revive = None
By accident, I found a solution to this puzzle:
class X(object):
__slots__ = ()
class Y(object):
pass
import gc
gc.is_tracked(X()) # False
gc.is_tracked(Y()) # True
An object with _empty_ slots is naturally untracked, as it can't create
back references.
Valentine
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com