Python的内存管理机制和垃圾清理机制简述

本文简述了Python的内存管理机制,包括基于引用计数的管理方式,以及当引用计数为0时,对象可能进入free_list链表等待复用。在垃圾清理机制部分,介绍了标记清除和分代收集两种策略,用于处理复杂的数据引用情况和优化内存回收效率。
摘要由CSDN通过智能技术生成

前言

首先,在了解Python的内存管理机制和垃圾清理机制之前,先记住一句话:【Python采用的是 以引用计数为主,标记清除和分代收集两种机制为辅的策略

内存管理概述

Python是由C语言开发的解释器,故任何操作Python都会调用C的代码,Python中所有类型创建对象时,底层都是PyObject和PyVarObject结构体来实现(1.开辟内存 2.数据初始化 3.将对象放到双向链表ref_chain中 )
在Python中每创建个对象,C语言结构体内部都要维护4个值:双向链表、ob_refcnt、ob_type之后对内存中的数据进行初始化。引用计数=0, 赋值然后将对象放到双向链表中refchain.
以后再有其他变量指向该内存 引用计算器+=1,如果销毁某个变量,则找到指向的内存,讲其计数器引用-1引用计数器如果引用为0,则进行垃圾回收。
但是某些数据在内部可能存在缓存机制 例如float/list/int,在其引用计数器引用计数器=0时,不会真正销毁,而是放在 1个叫 free_list的链表中。如果后期再创建同类型数据时,会取出链表中的对象,然后对对象进行初始化操作,重新赋上新值。

垃圾清理机制

1.引用计数
2.标记清除
标记清除策略是对引用计数测试的补充,解决的问题就是当容器数据类型(list、tuple、dict、object)类数据 引用计数为0时,但是它们内部的数据却引用着其他数据。
标记清除(Mark—Sweep)算法是一种基于追踪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值