gpt4 book ai didi

python - 关于 python 如何进行 GC 的一些有趣的事情

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:09 24 4
gpt4 key购买 nike

我编写了以下代码来检查python如何释放它的对象内存,嗯,我发现了一些有趣的东西,但我不确定,所以我将其发布在这里寻求帮助。

第一

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__

看起来当物体离开它的区域时,它会调用del函数来释放它的资源,先main离开,然后Adel,最后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解释器已经得到了它拥有的所有对象的字典,当对象离开它的区域时,它会通过字典序列释放它的资源,这可能与alpha序列相同,是这是真的吗?

最佳答案

看起来 GC 按字母顺序删除变量。

class A(object):
def __init__(self, val):
self.val = val
def __del__(self):
print self.val

if __name__ == '__main__':
b = A(2)
a = A(1)
c = A(3)
d = A(4)
print 'Bye!'

Bye!
1
3
2
4

但这并不总是有效。

class A(object):
def __init__(self, val):
self.val = val
def __del__(self):
print self.val

if __name__ == '__main__':
b = A(2)
a = A(1)
d = A(4)
c = A(3)
print 'Bye!'

Bye!
1
3
2
4

关于python - 关于 python 如何进行 GC 的一些有趣的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com