我最近读了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

这表明“一个非常明确和容易找到的‘泄密’”。这有内存泄漏吗?是dict缓存吗?

最佳答案

_cache是一个具有可变默认值的关键字参数,它确实在函数体中发生了变异。这将在可变关键字参数中永久存储MyBigFatObjects实例。
这与其说是泄漏,不如说是对可变关键字参数的寿命的误解。函数本身仍然可以调用del _cache[42]来删除这些对象。
有关此主题的详细信息,请参见"Least Astonishment" and the Mutable Default Argument

关于python - 有内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11684516/

10-11 04:20