栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

二十三、Python--内存管理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二十三、Python--内存管理

目录

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)

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号