在函数中创建和返回动态列表是否会在Python中创建内存泄漏?

时间:2010-11-10 11:28:02

标签: python memory-leaks garbage-collection

如果我在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()吗?

2 个答案:

答案 0 :(得分:6)

这里没有内存泄漏。分配给l的列表是在函数中生成的相同列表。 Python传递对象,而不是引用或值。

Python跟踪对该列表的引用:在while循环的每次迭代中,创建一个新列表并将其分配给l。这导致前一个不再有任何引用,因此它将被删除。

答案 1 :(得分:2)

在python中它是全自动的...大多数时候你不必担心垃圾收集......

在这种情况下,func创建一个列表并返回它。然后你将它分配给l。

一旦你给一个非空的var分配一个值,它只是抛出的第一个值,没有内存泄漏,你不必使用del ..

好吧,很酷,不是吗? :)