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

Reply via email to