删除变量不会从 RAM 内存中擦除其内存

Sha*_*ban 5 python python-2.7 canopy

我在地球科学应用中广泛使用 Python(Canopy)。因为我的应用程序是内存消耗,我试图找到方法来擦除我的程序中不再需要的变量,我尝试使用 del 命令来擦除变量内存,但我发现 Canopy 使用的空间仍然是相同的。关于如何从内存中完全擦除变量的任何想法。谢谢

Byt*_*der 6

你不能在 Python 中手动从内存中删除一个对象!

Python 垃圾收集器 (GC) 将自动释放不再存在引用的对象的内存(每个解释器的实现细节不同)。它会在没有您交互的情况下定期检查背景中的废弃对象。

因此,要回收一个对象,您必须通过为指向该对象的所有变量分配不同的值(例如 None)来消除对它的所有引用。您还可以使用该del语句删除变量名称,但正如您已经注意到的,这只会删除带有引用的名称,而不是对象及其数据本身。只有 GC 可以做到这一点。

  • 即便如此,回收的内存也不会立即返回给操作系统。像许多复杂的程序一样,出于效率原因,CPython 解释器有自己的内部内存管理。您可以在我对该问题的评论中的链接以及 [文档](https://docs.python.org/3/c-api/memory.html) 中阅读有关 Python 内存领域的信息。 (5认同)
  • 以上所有回复和评论都是正确的。总结一下:删除*所有* Python对一个对象的引用(包括IPython内核中的隐式引用),然后强制Python垃圾收集器运行将使内存有资格在同一个Python进程中重用,并且经常但并不总是让它被操作系统重新使用。但即便如此,它也不一定会出现在操作系统统计信息中。 (2认同)