__del__ is not called after creating a new reference

Steve D'Aprano steve+python at pearwood.info
Mon Mar 20 13:51:48 EDT 2017


On Sat, 18 Mar 2017 01:54 am, Oleg Nesterov wrote:

[...]
> However, this trivial test-case
> 
> class C:
> def __del__(self):
> print("DEL")
> global X
> X = self
> C()
> print(X)
> X = 0
> print(X)
> 
> shows that __del__ is called only once, it is not called again after "X =
> 0":
> 
> DEL
> <__main__.C object at 0x7f067695f4a8>
> 0

I cannot confirm that test case. When I try it, I get NameError:


py> class C:
...     def __del__(self):
...         print("DEL")
...         global X
...         X = self
...
py> C()
<__main__.C object at 0xb785c48c>
py> print(X)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'X' is not defined
py> X = 0
py> print(X)
0


I've tried it in both Python 2.7 and 3.5 and get the same NameError. I
suspect that you are not running the code you have shown us.




-- 
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.



More information about the Python-list mailing list