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