python(Class7)

内存管理之循环引用


在Python3.x中,内存管理问题基本上不会出现,类似与OC中的ARC机制
在Python2.x中,可以考虑使用gc.collect()的强制回收方法,但是gc无法解决循环引用的问题,需要通过weakref方法才能解决:in Node.__del__ in Data.__del__


import gc
import weakref


class Data(object):
    def __init__(self, value, owner):
        self.owner = weakref.ref(owner)
        self.value = value

    def __str__(self):
        return "%s's data, value is %s" % (self.owner(), self.value)

    def __del__(self):
        print('in Data.__del__')


class Node(object):
    def __init__(self, value):
        self.data = Data(value, self)  # 循环引用

    def __del__(self):
        print('in Node.__del__')

node = Node(100)
del node

# 在Python3.x中,gc.collect()的强制回收方法,可以解决循环引用的问题:in Node.__del__ in Data.__del__
# 但是在Python2.x中,需要用weakref才能处理循环引用的问题
# gc.collect()

input('wait...')




你可能感兴趣的:(python(Class7))