2017-06-08 32 views
0

Python是否会进行任何分析以提前释放内存?举例来说,如果我有:何时数据被释放?

d = some big array 
# ... use(d) ... 

# no d is used from here 
# a lot of other code, the code could use more big arrays 

什么时候蟒蛇决定删除由d使用的内存?

如果我在函数中使用d,函数完成后是否会释放d

也许一般来说这很难,因为d可以分配给其他人,并且在功能完成后他们可以继续使用d

不过,我一直在寻找一些好的做法,可以让蟒蛇使用较少的内存...

+1

当你不再使用'd'时,使用'del d'。 – nsilent22

+1

@ nsilent22它只是取消引用名称'd',但实际上并不会从内存中删除数组(除非它是唯一的引用)。 –

+1

与许多语言一样,Python使用垃圾收集器。但垃圾收集的细节是实现定义的。我所知道的大多数使用引用计数的实现,就像@ nsilent22提到的那样,使用'del'可以删除对象的引用,使他们有资格成为GC'd。 – 0x5453

回答

0

所有数据均以目标形式表示CTS。变量是对这些对象的引用(很像Java中的引用类型)。

一旦无法访问该对象(即,指向该对象的引用的总数降为0),对象将被垃圾收集。

要明确删除对象的引用,请使用del指令。如果删除对某个对象的唯一引用,则该对象将被垃圾收集。

一旦函数返回,所有局部变量都会被自动垃圾收集,你不需要自己做。

0

只要在函数中使用d时添加一点,就取决于声明d的时间。如果在函数中声明了d,并且没有引用d的内部函数,它将被垃圾收集。

例如:

def outer(): 
    d = np.arange(10000) 
    def inner(): 
     d += 1 
     return d 
    return inner 
在这种情况下d将仍然驻留在存储器如果返回 outer()功能后