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

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()还是什么?

Dan*_*man 6

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

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