首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python del没有释放所有内存

问python del没有释放所有内存
EN

Stack Overflow用户
提问于 2016-02-01 09:17:01
回答 2查看 12.8K关注 0票数 6

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

代码语言:javascript
复制
data = pandas.read_csv('data.csv')

在运行上面的命令之前,我用free -m检查了空闲内存,结果是1704。运行上述命令后,输出为729。我跑步

代码语言:javascript
复制
del(data)

释放data使用的内存。现在,当我检查空闲内存时,输出是1093,它比原来的1704小得多。剩下的都去哪了?我怎样才能释放它?我在ipython中运行所有这些,即使退出ipython也不能释放内存。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 09:32:40

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

假设您正在使用某个unix/linux变体,以获取有关ram使用的详细信息

代码语言:javascript
复制
cat /proc/meminfo

您的可用内存为空闲+非活动。免费现在可用,操作系统将在必要时从非活动状态回收空间。我保留了以下别名(在csh中)以进行检查

代码语言:javascript
复制
alias 'freemem' cat /proc/meminfo | grep -i 'inactive:\|memfree:'

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

代码语言:javascript
复制
import gc
foo = range(10000000)
del foo
gc.collect()

尽管如此,操作系统将缓存文件内容,这样当您再次尝试读取相同的文件时,它就不需要进行冗余的磁盘读取。

票数 15
EN

Stack Overflow用户

发布于 2016-02-01 09:34:04

del不是C的free或C++的delete

6.5。del语句

del_stmt ::= "del“target_list

删除是递归定义的,与定义赋值的方式非常相似。以下是一些提示,而不是详细说明。

目标列表的删除从左到右递归地删除每个目标。

删除名称会从本地或全局命名空间中移除该名称的绑定,具体取决于该名称是否出现在同一代码块中的全局语句中。如果名称未绑定,则会引发NameError异常。

如果名称作为自由变量出现在嵌套块中,则从本地名称空间中删除该名称是非法的。

属性引用、订阅和切片的删除被传递到所涉及的主对象;切片的删除通常等同于分配正确类型的空切片(但即使这也是由切片对象确定的)。

source Python spec

你没有释放内存。你是在告诉python你已经完成了这个变量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35121659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档