我有點困惑Python解釋器關閉時發生什麼事。 如果我寫一些代碼,這樣解釋器關閉時對象發生了什麼
class MyClass(object):
def __del__(self):
print "I'm going away"
o = MyClass()
並運行它,我會得到這個
I'm going away
我的理解是,當翻譯關閉它會刪除所有引用創建的對象和這些如果指定對象將運行__del__()
(因爲它們的引用計數爲0)。
我的困惑是因爲:
- 我不能夠找到說Python會在退出時清除所有引用的任何文件。
- 我很困惑,爲什麼當內存即將返回到操作系統並且聲明免費無論如何它正在清理對象。我猜想在複雜的系統中,刪除內存中即將釋放的對象的成本很高。
- 閱讀文檔
__del__()
我看到這個It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.
它變得有點複雜了,他們是否說因爲某些循環依賴或它不能保證它不能保證運行?誰來決定?
所以我的問題是:
- 誰叫
__del__
在我上面的例子 - 爲什麼它不是
guaranteed
被調用時,我沒有參考週期
不知道你在問什麼。你引用的文檔說'__del__'不能保證在解釋器退出時存在對象。不僅僅是具有參考週期的那些;沒有一個。一般來說,你不能認爲你的'__del__'方法會被調用。 – BrenBarn 2014-10-20 00:05:37
我想我問了2個問題,首先,在上面的例子中,我叫__del__,其次是爲什麼當我沒有周期時,它不能保證。 – 2014-10-20 00:09:45
文檔意味着可以或不可以調用解析器退出時存在的對象__del__。它看起來像你的情況,它被稱爲,但這基本上是運氣;你不能依靠它將被調用或不被調用的事實。至於你的第二個問題,我不知道技術上的原因,但事實就是這樣。文件很清楚,它就是這樣工作的。 – BrenBarn 2014-10-20 00:15:59