在python中清除/保留内存

2024-10-02 22:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,大约需要10分钟才能在我的本地机器上运行。在脚本开始时,我必须构建一些非常大的列表并遍历它们以执行各种清理功能,这将创建清理数据的新列表。在执行此操作时,是否有标准的方法来清除/保留内存

我最初的想法是在使用完变量后,简单地将其重置为空列表:

lst = [1,2,3, toinfinity..]
clean_lst = [x for x in l if x < infinity]
lst = []
cleaner_lst = [x for x in clean_lst if x > 100]
clean_lst = []
# etc...

Tags: 数据方法内存in功能脚本clean机器
2条回答

如果不确定更大的代码上下文,就很难知道这个答案是否有用,但假设您不需要保留原始列表:

只需将列表本身替换为已清理的版本:

lst = [1,2,3, toinfinity..]
lst = [x for x in lst if x < infinity]
lst = [x for x in lst if x > 100]

一般来说,Python可以很好地处理垃圾收集。在这个例子中,再次假设您不需要原始列表,创建临时列表只是使用内存,而不需要使用内存

首先,如果我是你,我会分析我的代码,例如通过封装你在函数中提到的那些调用,并调用

import cProfile
cProfile.run("my_function()") 

稍后,我将重点关注那些像您在post中要求的小优化(而不是关注真正的性能猪!),我将上面的代码替换为:

some_list = [x for x in range(infinity) if x > 100 and x < infinity]
# replacing range with xrange in python2

但这只是我考虑将这些方括号转换成普通括号,将我的列表转换成生成器之前的一步。如果你能更精确一点的要求,也许我们可以做得更好

例如,您提到您运行各种函数。为什么不换成这样的东西:

def clean_some_data(data, cleanup_functions):
    return [cleanup_function(data) for cleanup_function in cleanup_functions]

# or

def clean_some_data(data, cleanup_functions):
    for cleanup_function in cleanup_function:
        data = [cleanup_function(item) for item in data]
    return data

有一些可能性,但需要更多的细节

相关问题 更多 >