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

标签 python garbage-collection release

我编写了以下代码来检查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/

相关文章:

app-store - 应用商店 : submitting app with future release date then changing it to earlier date after it is approved

python - 我如何检测识别形状中的文本

python - 获取选定的特征名称 TFIDF Vectorizer

java - 软引用与弱引用

java - 对象创建的细微差别会导致完全不同的对象生命周期?

iphone - 如果我为更少的设备发布 iPhone 应用更新,会发生什么情况

python - Beautiful Soup 以错误的方式更改了 html 代码

python - 是否有 Excel 等效方法来模仿 pandas.DataFrame.iloc?

javascript - AngularJS - $scope.$new() 创建的作用域何时被删除。垃圾收集器或 Angular 会处理它吗?

python - Heroku:如何在部署时自动启动 Python 应用程序?