python del 没有释放所有内存

标签 python memory pandas del

在我的 python 程序中,我使用 pandas 读取一个 csv 文件并存储在内存中:

data = pandas.read_csv('data.csv')

在运行上述命令之前,我使用 free -m 检查可用内存,输出为 1704。运行上述命令后,输出为 729。我跑

del(data)

释放数据使用的内存。现在,当我检查可用内存时,输出为 1093,这比原来的 1704 少得多。剩下的去哪儿了?我怎样才能释放它?我在 ipython 中运行所有这些,即使退出 ipython 也不会释放内存。

谢谢。

最佳答案

“退出 ipython 不会释放内存”意味着您在操作系统级别看到了效果。您可能看到了内存缓存的效果。该数据保存在内存中,直到需要空间或再次读取文件 - 不是从磁盘读取文件,而是从内存的“非事件”部分读取。

假设你在一些 unix/linux 变体上,关于 ram 使用的详细信息

cat /proc/meminfo

您的可用内存为空闲 + 非事件。 Free 现在可用,操作系统将根据需要从 Inactive 回收空间。我保留以下别名(在 csh 中)以进行检查

alias 'freemem' cat /proc/meminfo | grep -i 'inactive:\|memfree:'

Python 的 del 将从命名空间中删除您的变量。因此,如果您的代码中没有在其他任何地方引用该内存,python 的垃圾收集将启动并清除内存中的数据。或者如果你想强制它:

import gc
foo = range(10000000)
del foo
gc.collect()

无论如何,操作系统都会将文件内容缓存起来,这样当您再次尝试读取同一个文件时,它就不必进行冗余磁盘读取。

关于python del 没有释放所有内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121659/

相关文章:

iphone - iOS App在启动时崩溃,没有显示任何错误

python - 对 python pandas 中的特定时间窗口求和

python - 如何限制Python 3中多线程程序中的API调用?

python - 强制 python 解释器重新加载代码模块

python - 使用计时器更新数据库

jQuery (2.0.2) empty() html() 内存消耗持续增长

linux - 如何确定linux中可用的物理内存

(任何)类的 Python 类型提示

python - 在提取列之后立即将 df[col].str.extract() 结果插入原始 Pandas df 的 pandanic 方式

Python系列,其中值是列表,获取另一个系列,其索引列表对应于每个项目列表