0
我的目標是記憶對象實例化,使得只有一個對象具有相同的初始化參數。蟒蛇記憶和內存泄漏
我改編了一些代碼this post,下面的代碼工作。基本上,memoize
是一個緩存初始化參數的裝飾器。下一次使用相同的初始化參數時,將返回緩存的對象,而不是創建新的參數。
from functools import wraps
def memoize(function):
memo = {}
@wraps(function)
def wrapper(*args):
if args in memo:
return memo[args]
else:
rv = function(*args)
memo[args] = rv
return rv
return wrapper
@memoize
class Test(object):
def __init__(self, v):
self.v = v
class TT(object):
def __init__(self, v):
self.t = Test(v)
tests= [Test(1), Test(2), Test(3), Test(2), Test(4)]
for test in tests:
print test.v, id(test)
tt = TT(2)
print id(tt.t)
而且我得到了想要的結果
1 4355094288
2 4355094416
3 4355094544
2 4355094416
4 4355094672
4355094416
我的問題是,我需要手動清除緩存memoize.memo
?它似乎會包含引用並阻止釋放內存。有沒有辦法讓這個資源發佈更加自動化?