2017-05-18 40 views
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?它似乎會包含引用並阻止釋放內存。有沒有辦法讓這個資源發佈更加自動化?

回答