首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >函数中的动态列表创建和返回会在Python中造成内存泄漏吗?

函数中的动态列表创建和返回会在Python中造成内存泄漏吗?
EN

Stack Overflow用户
提问于 2010-11-10 19:28:02
回答 2查看 305关注 0票数 2

如果我在python函数中创建一个列表并将其返回给调用者,那么垃圾收集如何处理该列表?我需要做些什么来防止内存泄漏的发生吗?

例如:

代码语言:javascript
代码运行次数:0
运行
复制
#!/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()还是其他什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-10 19:38:14

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

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

票数 6
EN

Stack Overflow用户

发布于 2010-11-10 19:36:30

在python中,这一切都是automatic...most of time,你不必担心垃圾回收……

在这种情况下,函数创建一个列表并返回它。然后将其赋值给l。

一旦你给一个非空的var赋值,它的第一个值就被抛出了,没有内存泄漏,你不需要使用del..

很酷,不是吗?:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4143967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档