垃圾回收 | Python从入门到精通:高阶篇之三十五

类中属性和方法 | Python从入门到精通:高阶篇之三十四

垃圾回收

就像我们生活中会产生垃圾一样,程序在运行过程当中也会产生垃圾。
程序运行过程中产生的垃圾会影响到程序的运行的运行性能,所以这些垃圾必须被及时清理。
什么是垃圾?
没用的东西就是垃圾。

class A:
    def __init__(self):
        self.name = 'A类'

a = A()

print(a.name)

input('回车键退出...')

执行结果:

垃圾回收 | Python从入门到精通:高阶篇之三十五

添加代码:

a = None

将a设置为了None,此时没有任何的变量对A()对象进行引用,它就是变成了垃圾。

在程序中没有被引用的对象就是垃圾,这种垃圾对象过多以后会影响到程序的运行的性能。所以我们必须进行及时的垃圾回收,所谓的垃圾回收就是讲垃圾对象从内存中删除。

在Python中有自动的垃圾回收机制,它会自动将这些没有被引用的对象删除,所以我们不用手动处理垃圾回收。
init类似的还有del
del是一个特殊方法,它会在对象被垃圾回收前调用

    def __del__(self):
        print('A()对象被删除了~~~',self)

此时,若没有a = None,它的执行结果为:

垃圾回收 | Python从入门到精通:高阶篇之三十五

如果存在a = None,a变成了垃圾,它的执行结果:

垃圾回收 | Python从入门到精通:高阶篇之三十五

如果此时又使用一个变量b,来引用a对应的对象

b = a

执行结果为:

垃圾回收 | Python从入门到精通:高阶篇之三十五

此时不会删除,因为有对象b的存在。
若添加b = None,则执行结果为:

垃圾回收 | Python从入门到精通:高阶篇之三十五

若直接执行del a,执行结果为:

垃圾回收 | Python从入门到精通:高阶篇之三十五

此时不会执行,是因为del直接删除的是变量a,并没有删除对象,有变量b的存在。
若也执行del b,则会出现:

垃圾回收 | Python从入门到精通:高阶篇之三十五

我们针对整体代码来说明一下input,代码最后一行的input指令用来接收一条用户输入,在用户输入数据前运行尚未中止,变量b未被销毁,而在用户输入完成后,系统运行结束,自动回收垃圾变量b。

配套视频课程,点击这里查看

获取更多资源请订阅Python学习站

上一篇:Python 入门篇-python3和python2的差异总结


下一篇:列表的简介 | Python从入门到精通:进阶篇之一