1
我寫了下面的代碼來檢查python如何釋放它的對象內存,以及我發現了一些有趣的東西,但我不確定,所以我在這裏發佈以尋求幫助。有趣的事情有關python如何做GC
首先
class A():
def __del__(self):
print "A __del__"
class B():
def __del__(self):
print "B __del__"
if __name__ == "__main__":
a = A()
b = B()
print "main leaving"
輸出爲:
main leaving
A __del__
B __del__
看來,當對象離開其區域,它會調用德爾函數釋放它的資源,第一主離開,然後A del,last B.
I thought may be A & B's __del__ function call's sequence is influenced by the object declare sequence, so I write it like this:
class A():
def __del__(self):
print "A __del__"
class B():
def __del__(self):
print "B __del__"
if __name__ == "__main__":
b = B() ### declare b first
a = A()
print "main leaving"
那麼,輸出是一樣的。
然後我重寫代碼,因爲這
class B():
def __del__(self):
print "B __del__"
class A():
def __del__(self):
print "A __del__"
if __name__ == "__main__":
a = A()
b = B()
print "main leaving"
然而,其結果是一樣的。
因此,似乎python解釋器已經得到了它所有對象的字典,並且當對象離開它的區域時,它將通過字典序列釋放它的資源,這可能與alph序列相同,這是真的?
時,在'Py_DECREF',引用計數變爲0,其中留有一定塊時引用遞減順序AFAIK CPython的將刪除對象是一個實現細節。它完全取決於如何將代碼編譯爲字節碼(並且,在刪除'dict'的情況下,它可能取決於*可以隨機的鍵的順序[即,在每次執行時改變,特別是在新版本的python with hash randomization active])。 – Bakuriu