如果删除包含另一个对象的对象会发生什么?
如果我有
class MyClass:
def __init__(self, object):
self.object = object
some_other_object = SomeOtherObject()
myclass = MyClass(some_other_object)
del myclass
会发生什么some_other_object?也会被删吗?
回答
如果在some_other_object整个程序中没有其他引用,那么是的,它也会被删除。
在您的情况下,有两个引用: 1)some_other_object和 2) myclass.object。
删除myclass只会删除第二个引用。但第一个仍然存在。
Python 使用一种称为“引用计数”的垃圾收集方法。简而言之,Python 会跟踪内存中每个对象的“引用”数量。如果您运行del x,您将对x被 1引用的对象的引用次数递减(当然,名称x不再引用该对象)。一旦一个对象的引用次数达到0,它就可以被垃圾回收(即它占用的内存可以被释放)。