私の目標は、同じ初期化引数を持つオブジェクトが1つしかないように、オブジェクトインスタンス化をメモすることです。python memoizationとメモリリーク
私は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
をクリアする必要がないということですか?それは参照を含み、メモリが解放されないようにするようです。このリソースのリリースをより自動化する方法はありますか?