python - 在函数中即时创建和返回列表是否会在 Python 中造成内存泄漏?

标签 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() 中的“列表”是否始终具有适当的引用计数? f1() 的调用者是否必须采取任何措施来防止发生内存泄漏?调用者是否应该在列表上执行 del() 或其他操作?

最佳答案

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

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

关于python - 在函数中即时创建和返回列表是否会在 Python 中造成内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143967/

相关文章:

python - PRAW:回复帖子

python - 在python中查找当前时间间隔?

Python:获取数据帧的2个时间列之间的时间差并过滤它们

Java Runtime.maxMemory 不正确?

c - 删除使用 lua_newuserdata 分配的内存

python - 使用 pyqt4 在设计的 qtdesigner ui 中添加 TreeView

javascript - 运行 javascript 过夜后系统挂起

java - 消息 "operations coalesced during safepoint"的含义

c# - 分析弱引用时阻止垃圾收集器

java - 检测 iOS Cordova 4.0 应用程序中的内存泄漏