使用标准库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....