Python 它有内存泄漏吗?

Python 它有内存泄漏吗?,python,memory-leaks,objgraph,Python,Memory Leaks,Objgraph,我最近读了这个文档,对下面的代码感到困惑 >>> class MyBigFatObject(object): ... pass ... >>> def computate_something(_cache={}): ... _cache[42] = dict(foo=MyBigFatObject(), ... bar=MyBigFatObject()) ... # a very explici

我最近读了这个文档,对下面的代码感到困惑

>>> 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\u cache吗?

\u cache
是一个具有可变默认值的关键字参数,它确实在函数体中发生了变化。这将在该可变关键字参数中永久存储
MyBigFatObjects
实例

这与其说是一个漏洞,不如说是对可变关键字参数的寿命的误解。函数本身仍然可以调用
del\u cache[42]
来删除这些对象


有关主题的更多信息,请参阅。

由于dict是可变的,因此对它所做的更改也会影响调用者,因此将保留对两个
MyBigFatObject
的引用


你应该明确地删除它(
del\u cache[42]
),而不是在自己的字典副本或任何其他可变对象中进行更改(你可以使用模块进行更改)。

这不是泄漏,因为只要
compute\u something
在范围内,总是有对
\u cache
的引用,所以它将始终保留在内存中