欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

二十三、Python--内存管理

时间:2023-04-25

目录

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)

 

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。