【发布时间】:2018-07-12 15:57:56
【问题描述】:
假设我有以下功能(只是一个例子):
a = ['apple', 'mango', 'kiwi']
b = ['apple']
def random_fucnction(a, b):
len_a = len(a)
len_b = len(b)
combined_len = len_a+len_b
diifrence = list(set(a)-set(b))
return diifrence, combined_len
为了减少内存,我通常在函数末尾使用del:
def random_fucnction(a, b):
len_a = len(a)
len_b = len(b)
combined_len = len_a+len_b
diifrence = list(set(a)-set(b))
del len_a, len_b
return diifrence, combined_len
有没有自动找出未使用的变量并在函数中删除它们的方法?
【问题讨论】:
-
我不确定未使用的变量,但您可以在删除它们后强制垃圾收集器:
import gc; gc.collect() -
我认为您需要阅读更多有关范围的信息。当函数结束时,all 你的局部变量被删除。此外,删除变量并不一定会删除它绑定的对象,只是删除一个特定的名称。
-
Here 是一篇关于python垃圾收集的好文章,包括
gc模块的使用。 -
@AndrejKesely, ...虽然没有太多意义——它们已经未被引用,所以额外的 GC 调用只是增加了尝试更快释放内存的开销;无论如何,它最终会发生(以更大、更高效的批次)。
-
另外,在 CPython 中,由于这些值不涉及循环,
gc.collect()甚至不会尽快清理它们。如果它们已经是垃圾,它们已经被收集了;如果它们还没有被收集,它们就不是垃圾,所以它不能收集它们。即使你有一个循环,你要做的就是手动打破它,比如a.bval=None,然后a和b会在删除时立即收集,无需调用collect。
标签: python python-3.x