它有内存泄漏吗?

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吗?

Mar*_*ers 5

_cache是一个带有可变默认值的关键字参数,它确实在函数体中发生了变异.这将MyBigFatObjects永久存储在该可变关键字参数中的实例.

这不是一个泄漏,而是对可变关键字参数的长寿的误解.函数本身仍然可以调用del _cache[42]删除这些对象.

有关该主题的更多信息,请参阅"最小惊讶"和可变默认参数.