joh*_*000 2 python memory-leaks objgraph
我最近阅读了objgraph文档,我对以下代码感到困惑
>>> class MyBigFatObject(object):
... pass
...
>>> def computate_something(_cache={}):
... _cache[42] = dict(foo=MyBigFatObject(),
... bar=MyBigFatObject())
... # a very explicit and easy-to-find "leak" but oh well
... x = MyBigFatObject() # this one doesn't leak
Run Code Online (Sandbox Code Playgroud)
它表明"非常明显且容易找到'泄漏'".这有内存泄漏吗?这是dict _cache吗?
_cache是一个带有可变默认值的关键字参数,它确实在函数体中发生了变异.这将MyBigFatObjects永久存储在该可变关键字参数中的实例.
这不是一个泄漏,而是对可变关键字参数的长寿的误解.函数本身仍然可以调用del _cache[42]删除这些对象.
有关该主题的更多信息,请参阅"最小惊讶"和可变默认参数.