2016-05-17 108 views
1

Python如何处理内存分配?作为开发人员,在使用Python创建大型应用程序时需要考虑的内存分配是否与内存分配有关?还是我应该相信Python以最佳方式管理这些内存?python如何处理内存分配?

+1

[阅读文档](https://docs.python.org/3/c-api/memory.html) – CoryKramer

+0

文档说“Python内存管理器”管理内存,但不回答问题(或者至少不在该部分中)关于开发者是否需要考虑什么。我猜想关键的一点是要确保多余的物体能够被垃圾收集等。我将回答这个问题给一个比我更了解这个问题的人。 – neil

+0

尼尔是对的,我读过文档,但我不确定自己是否应该做任何事情。 –

回答

3

Python会为您处理分配,但在某些情况下,您应该显式释放以停止Python或更广泛的系统在内存上运行不足。 del x从附加的任何数据中删除名称x,并且如果数据引用计数变为零,那么当下一次调用垃圾回收器时,该数据有资格进行垃圾回收。在程序失败之前肯定会发生这种情况,因为它的内存不足。

您可以显式调用垃圾回收器(标准Python模块gc)。 gc.collect()告诉它立即做一个完整的收集,如果你不希望它随机发生在随后的时间。你可以做很多其他事情来调整其行为以满足程序的需求。例如,您可以禁用并重新启用它,其中一段代码的实时行为很重要,其临时对象的流失很轻微。有关更多信息,请参阅https://docs.python.org/3/library/gc.html

对象的垃圾收集可能发生在重要的外部实体整理时。最简单的例子是f=open("some.file" ,"w")。如果您不使用with或调用f.close(),则文件保持打开状态,直到程序终止或者f被垃圾收集为止。

你需要知道吗?通常不需要像Gbytes那样备用的单用户系统,就像普通的台式电脑一样。也许是的,如果你正在编写Python代码来作为一个难以压制的服务器上的进程集合中的一个元素来运行。您不明确释放的内存可能是某些其他进程需要的内存。

+0

谢谢你的回答,这正是我想要的。 –