use*_*109 3 python memory del pandas
在我的python程序中,我pandas用来读取csv文件并存储在内存中:
data = pandas.read_csv('data.csv')
Run Code Online (Sandbox Code Playgroud)
在运行上面的命令之前,我检查空闲内存,free -m输出是1704.运行上面的命令后输出为729.我跑
del(data)
Run Code Online (Sandbox Code Playgroud)
释放使用的内存data.现在,当我检查空闲内存时,输出1093比原始内存小得多1704.其余的去哪儿了?我怎么能免费呢?我正在运行所有这些ipython,甚至退出ipython也没有释放内存.
谢谢.
22d*_*ees 10
"退出ipython不会释放内存"意味着你在操作系统级别上看到了这种效果.您可能已经看到了内存缓存的影响.该数据保存在内存中,直到需要空间或再次读取文件 - 而不是从磁盘读取文件,它将从内存的"非活动"部分读取.
假设您使用的是某些unix/linux变体,有关ram使用的详细信息
cat /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
您的可用内存为Free + Inactive.Free现在可用,操作系统将根据需要从Inactive中回收空间.我保留以下别名(在csh中)来检查
alias 'freemem' cat /proc/meminfo | grep -i 'inactive:\|memfree:'
Run Code Online (Sandbox Code Playgroud)
Python的del将从命名空间中删除您的变量.因此,如果代码中的其他地方没有引用该内存,python的垃圾收集将启动并清除内存中的数据.或者如果你想强迫它:
import gc
foo = range(10000000)
del foo
gc.collect()
Run Code Online (Sandbox Code Playgroud)
无论如何,操作系统将保持文件内容缓存,因此当您尝试再次读取同一文件时,它不必执行冗余磁盘读取.
del不是 Cfree或 C++delete
6.5. 德尔声明
del_stmt ::= "del" target_list
删除的递归定义与赋值的定义方式非常相似。这里没有详细说明,而是一些提示。
删除目标列表会从左到右递归地删除每个目标。
删除名称会从本地或全局名称空间中删除该名称的绑定,具体取决于该名称是否出现在同一代码块中的全局语句中。如果名称未绑定,则会引发 NameError 异常。
如果某个名称作为嵌套块中的自由变量出现,则从本地命名空间中删除该名称是非法的。
属性引用、订阅和切片的删除传递给所涉及的主要对象;切片的删除通常等同于分配正确类型的空切片(但即使这也是由切片对象决定的)。
你没有释放内存。你告诉python你已经完成了那个变量。
| 归档时间: |
|
| 查看次数: |
6825 次 |
| 最近记录: |