自动释放python中不再使用的变量的内存

时间:2020-03-19 14:49:08

标签: python pandas memory del

我是Python新手。 假设我使用大熊猫数据框。 我的代码如下所示:

all_data = pd.read_csv(huge_file_name)
part_data = all_data.loc['ColumnName1', 'ColumnName2','ColumnName3']
data_filtered = part_data.loc[:,part_data['ColumnName2']==-1]

,依此类推。 是某种方式,python可以删除不再使用的all_data,part_data和其他变量吗? 我可以编写del var_name,但是它将使代码变得非常脏。 我也可以为所有变量使用相同的名称,但是看起来也不好。 预先谢谢大家!

1 个答案:

答案 0 :(得分:1)

使用del关键字是一种方法;我不确定您是否对使代码“肮脏”感到担忧。 Python人们喜欢说explicit is better than implicit,而这就是一个例子。

否则,在函数范围内声明中间变量,并在函数终止时释放这些变量使用的空间(或者更确切地说,为“垃圾回收”标记为 ;请参见下文)。

所以您可以:

import gc

all_data = pd.read_csv(huge_file_name)
part_data = all_data.loc['ColumnName1', 'ColumnName2','ColumnName3']
data_filtered = part_data.loc[:,part_data['ColumnName2']==-1]

del all_data, part_data

# and if you're impatient for that memory to be freed, like RIGHT now
gc.collect()

或者您可以:

import gc

def filter_data(infile):
    all_data = pd.read_csv(infile)
    part_data = all_data.loc['ColumnName1', 'ColumnName2','ColumnName3']
    return part_data.loc[:,part_data['ColumnName2']==-1]

data_filtered = filter_data(huge_file_name)

# force out-of-scope variables to be garbage collected RIGHT now
gc.collect()

del关键字从本地作用域释放一个变量,因此可以(最终)进行垃圾回收,但是当变量超出作用域时释放的内存可能不会立即返回到操作系统。 The SO thread AMC会帮助您提供详细信息。

垃圾收集策略是博士学位级别的计算机科学,但我的直觉是,只有在Python运行时上存在释放内存的“压力”时才触发GC。例如,新的变量声明需要使用范围外的变量先前使用的内存。

您要小心地指出,这是一个大的CSV文件,已被读取到单个(Pandas)数据结构中,但是请注意,通常情况下,会自动对垃圾范围变量进行自动垃圾收集,并且通常 ,您不需要自己对该流程进行微观管理

Here是有关Python垃圾收集的一些背景知识,您可能会发现这很有启发性,而here是其他时候讨论del有用(将片段从列表中删除,例如)。