二十三、Python--内存管理

本文深入探讨Python的引用机制,包括引用计数的定义、工作原理、使用方式以及其优缺点。同时,介绍了Python的垃圾回收机制,如何时触发垃圾回收、分代回收策略。此外,还提及了Python的缓冲池和深拷贝、浅拷贝的概念,帮助理解Python内存管理的细节。
摘要由CSDN通过智能技术生成

目录

0.Python引用机制

1.Python引用计数

        定义:

        原理:

        使用:

        获取引用计数:getrefcount() ​

        增加引用计数:

        减少引用计数:del

        循环引用的情况:

        优点:

        缺点:

2.Python垃圾回收

        原则:

        gc机制:

        触发垃圾回收的的三种情况:

        分代回收generation:

3.Python缓冲池

 4.深拷贝与浅拷贝

        浅拷贝:

        深拷贝


0.Python引用机制

        Python的引用机制是动态类型,对象是存储在内存加中的实体

        我们在程序中写的对象名,只是指向这一对象的引用

        引用和对象分离,是动态类型的核心

        引用可以随时指向一个新的对象(内存地址会不一样)

 

1.Python引用计数

        定义:

                在Python中,每个对象都有存有指向该对象的引用总数,即引用计数

        原理:

                每个对象维护一个ob_ref字段,用来记录该对象当前被引用的次数

                每当有新的引用指向该对象时,他的引用计数+1

                每当该对象的引用失效时,引用计数-1

                引用计数为0时,该对象将被回收释放

                #需要额外的空间维护引用计数,并且不能解决对象的“循环引用”

        使用:

        获取引用计数:getrefcount() 

 #当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用,获取的值会比期望的多1.

        增加引用计数:

        减少引用计数:del

        循环引用的情况:

                 

        优点:

                简单

                实时

        缺点:

                维护引用计数消耗资源

                循环引用时,无法回收。

2.Python垃圾回收

        原则:

                当Python的某个对象的引用计数降为0时,可以被垃圾回收。

        gc机制:

                GC作为现代编程语言的自动内存管理机制,专注于两件事

                找到内存中无用的垃圾资源

                清除这些垃圾并把内存让出来给其他对象使用。
        

 

       

        触发垃圾回收的的三种情况:

               

                调用gc.collect()

                GC达到阈值时

                程序退出时       

        分代回收generation:

                Python将所有对象分为0、1、2三代

                所有新建的对象都是0代对象

                当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象

                        垃圾回收启动时,一定会扫描所有0代对象

                        如果0代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理

                        当1代也经历了一定次数的垃圾回收,那么会启动0、1、2,即所有对象进行扫描

        标记清除

        

 

3.Python缓冲池

                

 

字符串驻留区

加了特殊字符就不会放在字符区

 4.深拷贝与浅拷贝

        浅拷贝:

        只拷贝第一层的地址

        lst1 = lst2.copy()

        lst1 = lst2[::]

 

        深拷贝

import copy

b = copy.deepcopy(a)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值