如果我在 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() 中的“列表”是否始终具有适当的引用计数? f1() 的调用者是否必须采取任何措施来防止发生内存泄漏?调用者是否应该在列表上执行 del() 或其他操作?
最佳答案
这里没有内存泄漏。分配给 l
的列表与函数中生成的相同列表。 Python 传递对象,而不是引用或值。
Python 跟踪对该列表的引用:在 while
循环的每次迭代中,都会创建一个新列表并将其分配给 l
。这导致之前的不再有任何引用,因此将被删除。
关于python - 在函数中即时创建和返回列表是否会在 Python 中造成内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143967/