No *_*lar 2 python garbage-collection memory-leaks
如果我在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()
Run Code Online (Sandbox Code Playgroud)
这会导致内存泄漏吗?f1()中的'list'是否始终具有适当的引用计数?f1()的调用者是否必须做任何事情来防止内存泄漏?调用者应该在列表上做del()还是什么?
这里没有内存泄漏.分配给l
的列表与在函数中生成的列表相同.Python传递对象,而不是引用或值.
Python跟踪对该列表的引用:在循环的每次迭代中while
,创建并分配新列表l
.这会导致前一个不再有任何引用,因此它将被删除.