根据我读到的这篇文章,看起来不可变类型可能会变得不朽。
http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm
我目前正在努力解决我在谷歌应用引擎上运行的网络服务的内存使用问题。 “使用过多的元组”是否可能是导致此问题的潜在原因?
感谢回复: 我在 google app engine 后端实例上运行我的代码,它有一个内存使用上限 (128mb)。它说我使用了比允许更多的内存并停止了我的实例。如评论所述,可能是“内存使用量仍然很大”而不是“内存泄漏”。
最佳答案
这篇文章没有指定不可变类型 - 它指定:
Another possible cause for excessive memory usage is that Python uses so-called “free lists” for certain object types, including integers and floats.
我不知道您可以获得关于 GAE 进程的哪些信息,但是您可以在自己的系统上尝试这个实验。
首先,启动一个python解释器并找到进程。然后运行这个命令:
>>> many_tuples = [() for x in range(5000000)] #replace with xrange for 2.x
然后,看看内存使用情况。您刚刚创建了一个包含 500 万个元组的列表。现在输入:
>>> del many_tuples
在我的系统(Python 3.2、Win 7)上,我的内存使用量激增了大约 20k,然后在我del
变量后下降了相同的数量。如果您可以获得有关您的进程(CPU、内存使用情况)的信息,您可以尝试这样做 - 可能连续多次,这应该会给您带来一些更高内存使用率的峰值。
关于python 不会为元组释放内存,是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099083/