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 threadAMC 有帮助地指出你有细节。
垃圾收集策略是博士级计算机科学的东西,但我的直觉是,只有在 Python 运行时存在释放一些内存的“压力”时才会触发 GC;例如,新的变量声明需要使用一些以前被超出范围的变量使用的内存。
您小心地指出这是一个被读入单个 (Pandas) 数据结构的大型 CSV 文件,但请注意,超出范围的变量通常会自动被垃圾收集,并且 通常您不需要自己对这个过程进行微观管理。
Here 是有关 Python 垃圾收集的一些背景知识,您可能会发现它很有启发性,here 是对 del 有用的其他时间的讨论(例如,从列表中删除切片)。