假设我具有以下功能(仅作为示例):
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
是否有自动找到未使用的变量并将其删除的功能?
答案 0 :(得分:3)
自动方法是什么都不做。
局部变量(包括参数)在函数末尾超出范围。这与您的del
具有完全相同的效果,因此您没有做任何有用的事情。
关于内存使用情况:Python是自动垃圾收集的。如果您的变量是对值的唯一引用,则该变量在删除或超出范围后立即变为垃圾。
对于CPython,收集主要通过引用计数来完成。这意味着该值将被销毁,并在内存变为垃圾时立即将其返回到空闲列表。除非该值包含在参考循环中,否则在下一次循环收集器运行之前,该值将不会被销毁。
在大多数其他Python实现中,有一个更复杂的垃圾收集器,直到不久以后很难预测时间后,它才会发现垃圾并销毁它。
但是无论哪种方式,del
都不会改变任何东西。您仍然只是删除变量,这间接地使值变成垃圾,因此可以收集;您不会对价值本身做任何事情。