如果我在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()还是其他什么?
发布于 2010-11-10 11:38:14
这里没有内存泄漏。分配给l
的列表与在函数中生成的列表相同。Python传递对象,而不是引用或值。
l
跟踪对该列表的引用:在while
循环的每次迭代中,都会创建一个新的列表并将其分配给Python。这会导致前一个不再有任何引用,因此它将被删除。
发布于 2010-11-10 11:36:30
在python中,这一切都是automatic...most of time,你不必担心垃圾回收……
在这种情况下,函数创建一个列表并返回它。然后将其赋值给l。
一旦你给一个非空的var赋值,它的第一个值就被抛出了,没有内存泄漏,你不需要使用del..
很酷,不是吗?:)
https://stackoverflow.com/questions/4143967
复制相似问题