python不会为元组释放内存,不是吗?

luc*_*mia 2 python google-app-engine memory-leaks tuples backend

根据我读到的这篇文章,看起来不可变的类型可能变得不朽.

http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm

我目前正在努力解决在谷歌应用引擎上运行的我的网络服务的内存使用问题."使用太多元组"可能是导致此问题的潜在原因吗?


感谢您的回复:我在谷歌应用引擎后端实例上运行我的代码,它有一个内存使用上限(128mb).它说我使用的内存比允许的多,并且停止了我的实例.正如评论所提到的,它可能是"内存使用量仍然很大"而不是"内存泄漏".

Way*_*ner 5

本文未指定不可变类型 - 它指定:

内存使用过多的另一个可能原因是Python对某些对象类型使用所谓的"空闲列表",包括整数和浮点数.

我不知道您可以在GAE流程中获得哪些信息,但您可以在自己的系统上尝试此实验.

首先,启动一个python解释器并找到该过程.然后运行以下命令:

>>> many_tuples = [() for x in range(5000000)] #replace with xrange for 2.x
Run Code Online (Sandbox Code Playgroud)

然后,看一下内存使用情况.你刚刚创建了一个包含500万个元组的列表.现在输入:

>>> del many_tuples
Run Code Online (Sandbox Code Playgroud)

在我的系统上(Python 3.2,Win 7),我的内存使用量大约增加了20k,然后del在变量变化后下降了相同的量.如果您可以获得有关您的进程(CPU,内存使用情况)的信息,您可以尝试这样做 - 可能连续几次,这应该会给您带来一些更高内存使用量的峰值.