如果我在python函数中创建一个列表并将其返回给调用者,那么垃圾收集如何在该列表上工作?我是否必须做任何事情以防止发生内存泄漏?
例如:
#!/usr/bin/python
import random
class Example:
def f1(self):
list = []
len = random.randint(0, 30)
for i in range (0, len):
list.append(random.randint(0, 65536))
return list
random.seed(None)
e = Example()
while (1):
l = e.f1()
这会导致内存泄漏吗? f1()中的'list'是否始终具有适当的引用计数? f1()的调用者是否必须做任何事情来防止内存泄漏?调用者应该在列表上做del()吗?
答案 0 :(得分:6)
这里没有内存泄漏。分配给l
的列表是在函数中生成的相同列表。 Python传递对象,而不是引用或值。
Python跟踪对该列表的引用:在while
循环的每次迭代中,创建一个新列表并将其分配给l
。这导致前一个不再有任何引用,因此它将被删除。
答案 1 :(得分:2)
在python中它是全自动的...大多数时候你不必担心垃圾收集......
在这种情况下,func创建一个列表并返回它。然后你将它分配给l。
一旦你给一个非空的var分配一个值,它只是抛出的第一个值,没有内存泄漏,你不必使用del ..
好吧,很酷,不是吗? :)