Python垃圾回收与内存泄露

    Python是面向对象、高级编程语言,其世界里万物皆对象,当我们编写的程序运行时,代码中定义的对象在物理内存中会占用相应的空间。现在流行的高级语言如Java,C#等都采用了垃圾收集机制自动管理内存使用,而不像C,C++需要用户自己分配、释放内存。自己管理内存的优点是自由灵活,可以任意申请内存,但存在致命的缺点是可能会造成内存泄露。

    Python解释器内核采用内存池方式管理物理内存,当创建新对象时,解释器在预先申请的物理内存块上分配相应的空间给对象使用,这样可以避免频繁的分配和释放物理内存。那么这些内存在什么时候释放呢?这涉及到Python对象的引用计数和垃圾回收。

1. 相关概念

1.1 什么是垃圾

    先看一个例子。

# -*- coding: utf8 -*-

class A(object):
    def __init__(self):
        self.data = [x for x in range(10000)]
        self.child = None
       
def ref():
    a1 = A()
    a2 = A()
    
    a1.child = a2

    在上述代码中,定义了类A,以及ref函数。在ref函数中,申明了A的两个实例对象,并且变量a1、a2分别指向这两个对象,且a1引用了a2指向的对象。当ref函数结束后,也就是a1和a2离开了作用域,在python解释器内部无任何地方引用这两个对象,因此a1、a2指向的两个对象变成“垃圾”对象。这些对象也就是所谓的内存垃圾,python解释器有一套垃圾回收机制,确保内存中无用对象及其空间及时被清理。   

1.2 什么是垃圾回收

    Python垃圾回收是指内存不再使用时的释放和回收过程。Python通过两种机制实现垃圾回收:引用计数能解决循环引用问题的垃圾收集器。

garbage collection

    The process of freeing memory when it is not used anymore. Python performs garbage collection via reference counting and a cyclic garbage collector that is able to detect and break reference

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值