记录---python内存管理机制
2022/3/28 7:23:47
本文主要是介绍记录---python内存管理机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python中创建的对象的时候,首先会去申请内存地址,然后对对象进行初始化,所有对象都会维护在一个叫做refchain的双向循环链表中,每个数据都保存如下信息- 链表中数据前后数据的指针
- 数据的类型
- 数据值
- 数据的引用计数
- 数据的长度(list,dict..)
- 对象被创建
- 对象被别的变量引用(另外起了个名字)
- 对象被作为元素,放在容器中(比如被当作元素放在列表中)
- 对象被当成参数传递到函数中
- 对象的别名被显式的销毁
- 对象的一个别名被赋值给其他对象 (例:比如原来的a=10,被改成a=100,那么此时10的引用计数
- 就减少了)
- 对象从容器中被移除,或者容器被销毁(例:对象从列表中被移除,或者列表被销毁)
- 一个引用离开了它的作用域(调用函数的时候传进去的参数,在函数运行结束后,该参数的引用即
- 被销毁)
- float缓存100个对象
- dict、list等一些内置的数据类型,会缓存80个对象
- 元组 会根据元组数据的长度,分别缓存元组长度为0-20的对象。
- 其他的类型缓存2个对象
三、标记清除: 引用计数存在一个缺点:那就是当两个对象出现循环引用的时候,那么这个两个变量始终不会被销毁,这样就会导致内存泄漏。 标记清除就是为了解决上述循环引用的情况 四、分代回收 gc.get_threshold:获取分代回收的频率
- 返回的是(700,10,10),这也是gc的默认值。这个值的意思是说,在第0代对象数量达到700个
- 之前,不把未被回收的对象放入第一代;而在第一代对象数量达到10个之前也不把未被回收
- 的对象移到第二代
- gc.set_threshold: 设置分代回收的频率
这篇关于记录---python内存管理机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器