__del__在未分配的python对象上的行为

时间:2014-10-09 09:55:09

标签: python reference-counting del

有史以来第一个问题,对不起,如果以前曾被问过 - 我做过搜索,但我找不到任何似乎可以回答它的内容。

我一直在尝试理解python的__del__方法的行为,因为我需要它来对包装的C代码执行一些清理。

我对__del__的理解是在对象的引用计数达到零时调用,而不是在对象引用上调用del时调用。这使我相信,实例化一个没有赋值的对象会立即调用__init__然后调用__del__,但事实并非如此,如下面的代码所示:

class Foo():
   def __init__(self):
      print "Hello"
   def __del__(self):
      print "Goodbye"

Foo()
Hello
<__main__.Foo instance at 0x7fb943075a28>

有人能解释一下这里发生了什么吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

Python交互式解释器保留对_ variable中最后结果的引用。你的物体还活着。

运行另一个表达式来清除它:

>>> class Foo():
...    def __init__(self):
...       print "Hello"
...    def __del__(self):
...       print "Goodbye"
... 
>>> Foo()
Hello
<__main__.Foo instance at 0x100651ef0>
>>> _
<__main__.Foo instance at 0x100651ef0>
>>> 'Hello world!'
Goodbye
'Hello world!'