如何在环形数据结构中管理内存

使用标准库weakref,它可以创建一种能访问对象但不增加引用计数的对象
若引用通过循环引用来解决这个问题,本质上说,
弱引用时一个指向对象的指针,但不会增加对象本身的引用计数。

import weakref
class Data(object):
    def __init__(self, value, owner):
        # self.owner = owner
        self.owner = weakref.ref(owner)  # 更改为
        self.value = value

    def __str__(self):
        # return "%s's data, value is %s" % (self.owner, self.value)
        # 更改为,注意调用时要加括号
        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
input('wait....')

运行结果

in Node.__del__
in data.__del__
wait.... 

猜你喜欢

转载自blog.csdn.net/weixin_33946605/article/details/87254118