內(nèi)存管理之循環(huán)引用
在Python3.x中,內(nèi)存管理問(wèn)題基本上不會(huì)出現(xiàn),類似與OC中的ARC機(jī)制
在Python2.x中,可以考慮使用gc.collect()的強(qiáng)制回收方法,但是gc無(wú)法解決循環(huán)引用的問(wèn)題,需要通過(guò)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) # 循環(huán)引用
def __del__(self):
print('in Node.__del__')
node = Node(100)
del node
# 在Python3.x中,gc.collect()的強(qiáng)制回收方法,可以解決循環(huán)引用的問(wèn)題:in Node.__del__ in Data.__del__
# 但是在Python2.x中,需要用weakref才能處理循環(huán)引用的問(wèn)題
# gc.collect()
input('wait...')