我有大量代码,其中使用了一些自定义类和很多字典。许多类都将字典添加为属性。我发现它使用了太多的内存,尤其是当我在循环时——即使我手动删除了一些类和字典。
我担心正在发生的是字典被删除,但它们包含的对象仍然存在。我需要重构代码以获得更好的内存管理,但作为一个快速的解决方案,我希望我可以递归地、积极地删除字典。这将如何实现?
这是一个例子......
def get_lrg():
return {1: np.zeros((1000,1000,100))}
class H():
def add_lrg(self):
fd = get_lrg()
self.lrg = fd
for cls in ['a', 'b', 'c', 'd']:
exec('{0} = H()'.format(cls) )
exec('{0}.add_lrg()'.format(cls) )
del a
del b
del c
del d
另外,在 Ipython 中玩这个:
fd = get_lrg()
fd2 = get_lrg()
F = {1: fd, 2: fd2}
F = {}
F = {1: fd, 2: fd2}
del F[1]
del F
并观察 python 应用程序的内存使用情况......即使在字典“F”已被删除(例如,没有对对象的引用)之后,它似乎也不会“释放”内存。我在我的机器上发现结果是不可预测的。有时它确实似乎内存被刷新,其他时候它似乎一直在使用。