内存管理之循环引用
在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...')