On Thu, Sep 3, 2015 at 9:23 AM, Valentine Sinitsyn
<valentine.sinit...@gmail.com> wrote:
> 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/fijall%40gmail.com

That does not make it ok to have del called several time, does it?
_______________________________________________
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