首页 > 解决方案 > 如果删除包含另一个对象的对象会发生什么?

问题描述

如果我有

class MyClass:
    def __init__(self, object):
        self.object = object
some_other_object = SomeOtherObject()
myclass = MyClass(some_other_object)
del myclass

发生了some_other_object什么?也会被删吗?

标签: python

解决方案


some_other_object如果整个程序中没有其他引用,那么是的,它也将被删除。

在您的情况下,有两个参考: 1)some_other_object和 2) myclass.object

删除myclass只是删除第二个引用。但第一个仍然存在。

Python 使用一种称为“引用计数”的垃圾收集方法。简而言之,Python 会跟踪内存中每个对象的“引用”数量。如果您运行del x,您将减少对x由 1 引用的对象的引用数(当然,该名称x不再引用该对象)。一旦一个对象的引用数达到0,就可以对它进行垃圾回收(即可以释放它占用的内存)。


推荐阅读