为什么我可以返回对象的引用?

时间:2015-03-17 23:54:14

标签: python

Python如何处理分配新对象并返回引用的函数?

def fun_function():
    obj = {}
    for x in range(100):
        obj[x] = True
    return obj

如果因为堆栈指针而回想起这样的东西在C中不起作用,但在Python中它似乎有效。对于长期运行的程序,这种返回值会有记忆后果吗?

是否更倾向于将对象的句柄传递给函数?

2 个答案:

答案 0 :(得分:0)

在Python中,所有内容都在堆上分配(或者对于少数几件事情,你不能告诉他们他们不是)。当垃圾收集器不再可以访问时,垃圾收集器将负责释放它们。没有相当于C的基于堆栈的变量生命周期;你永远不必担心一个物体在你使用它时会被解除分配。

答案 1 :(得分:-3)

这里你基本上有一个工厂方法。如果本地指针丢失,则调用方法将指向新创建的列表(obj局部变量)

一旦方法外部的指针被取消范围化,垃圾收集器就不会收集内存,但它不是内存泄漏,除非该赋值在全局范围内。