python编程(类的释放)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

大多数的脚本语言都是由虚拟机来安排内存释放的。所以,这些语言一本只要申请内存使用,不需要手工去释放它们。那它们是什么时候被释放的,其实我们可以自己做几个实验看看。

1、单个变量

我们知道python语言下面,类释放的时候会调用 del
这个函数,所以只要在这个函数里面添加一些消息就可以了。

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()

这几行代码比较简单,几乎输完命令的同时就结束了。结果也是很清楚的,出现了init和del的打印。这说明虚拟机在执行结束的时候确实是调用了del函数的。

2、添加循环

为了增加复杂性,可以在原有代码后面增加一些 循环
,这样可以看看循环发生之前虚拟机是否会调用del函数。

import time

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()

cnt = 0
while True:
    time.sleep()
    cnt += 1
    print cnt

实验表明,在循环之前不会有del的相关打印。这说明,del函数调用是由虚拟机决定的。del发生的时间决定与虚拟机的垃圾回收机制。

3、显式删除

既然不清楚什么时候删除变量,那么我们可以用del这个命令来删除,效果是一样的。

import time

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()
del a

cnt = 0
while True:
    time.sleep()
    cnt += 1
    print cnt

通过实验,我们发现del在循环之前确实被调用了,相关的打印也可以在终端清楚地看出来。这说明del会强制class内存被释放,且这应该是一个阻塞的动作。

4、使用注意

目前为止,我在使用python的时候还没有显示遇到内存方面的问题。唯一的经验,就是对于大量的业务数据空间,要及时del掉。这样可以del时间均匀地分配到每一个业务中去,防止后面的delay时间过长,仅此而已。如果大家有什么好的想法和做法,也欢迎多多交流。

稿源:平凡的程序员 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » python编程(类的释放)

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录