【python】垃圾自动回收

本文介绍了Python中的垃圾回收机制,强调了其自动回收无用对象以优化内存性能的重要性。通过示例代码展示了对象引用、解除引用及程序退出时垃圾回收的过程,帮助读者深入理解Python内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说到垃圾回收,其实这玩意在我们使用python中一直伴随左右,只不过通常我们都无感知而已。

python有着垃圾自动回收机制,没啥难的,只不过在面试的时候,可能会被面试官问到,且记录一番。

既然是垃圾,那自然是无用的东西了。大家都知道,在python中,一切皆为对象。那么,那些没有被引用
的对象,就是垃圾。

如果垃圾不回收的话,那么会一直在我们的内存中。当垃圾越来越多,程序运行性能也就越来越差。所以,
我们要及时的回收垃圾,所谓垃圾的回收,就是将垃圾对象从内存中删除。

在python中,它会自动将没有被引用的对象删除,所以我们也不需要手动去处理。
下面我们用代码来辅助说明一下,加深理解记忆。

1.对象被正常引用,所以不是垃圾
class Demo():
    def __init__(self):
        self.name = "垃圾回收演示"

    def __del__(self):
        """ 特殊方法,在对象被垃圾回收之前调用"""
        print("Demo()对象被删除", self)


a = Demo()
print(a.name)

input("回车退出程序...")

这里的代码呈现的就是一个常见的引用关系,此时Demo()被a引用,所以它并不是垃圾。
至于特殊方法在运行程序时,自然也不会调用。

# 运行结果:
垃圾回收演示
回车退出程序...
2.对象没有被引用,被垃圾回收

修改代码,将a=None,这时候Demo()对象就没有被引用了,所以就成了垃圾,运行的时候可以看到__del__()的调用。

class Demo():
    def __init__(self):
        self.name = "垃圾回收演示"

    def __del__(self):
        """ 特殊方法,在对象被垃圾回收之前调用"""
        print("Demo()对象被删除", self)


a = Demo()
print(a.name)

a = None  # 这时候Demo()对象就没有被引用了,所以就成了垃圾

input("回车退出程序...")

运行一下:

垃圾回收演示
Demo()对象被删除 <__main__.Demo object at 0x000002A6D9AEB0B8>
回车退出程序...
3.两个变量都在引用,只删掉其中一个

继续修改代码,增加一行b = a,也就是说,现在变量a和变量b都在引用对象Demo()。
虽然a = None,但是b仍然在引用,所以这时候Demo()对象不是垃圾。

class Demo():
    def __init__(self):
        self.name = "垃圾回收演示"

    def __del__(self):
        """ 特殊方法,在对象被垃圾回收之前调用"""
        print("Demo()对象被删除", self)


a = Demo()
print(a.name)

b = a  # 增加 另一个引用

a = None  

input("回车退出程序...")

运行结果:

垃圾回收演示
回车退出程序...
4.程序退出,python自动垃圾回收

最后,当我们继续敲击回车键的时候,会看到Demo()对象被删除。

垃圾回收演示
回车退出程序...
Demo()对象被删除 <__main__.Demo object at 0x000001ED56D19630>

这是因为,在我运行这个程序的时候,没敲回车键之前,程序一直都在持续运行中,里面的对象在被引用。
当敲击回车键后,程序运行也就是结束了,那么程序里的对象也就没用了,所以python会自动回收掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值