98 python高级 - 垃圾回收(一)
Python 高级 垃圾 回收 98
2023-09-11 14:15:43 时间
1. 小整数对象池
整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。
Python 对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,所有位于这个范围内的整数使用的都是同一个对象.
同理,单个字母也是这样的。
但是当定义2个相同的字符串时,引用计数为0,触发垃圾回收
2. 大整数对象池
每一个大整数,均创建一个新的对象。
3. intern机制
a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld"
python会不会创建9个对象呢?在内存中会不会开辟9个”HelloWorld”的内存空间呢? 想一下,如果是这样的话,我们写10000个对象,比如a1=”HelloWorld”……a1000=”HelloWorld”, 那他岂不是开辟了1000个”HelloWorld”所占的内存空间了呢?如果真这样,内存不就爆了吗?所以python中有这样一个机制——intern机制
,让他只占用一个”HelloWorld”所占的内存空间。靠引用计数去维护何时释放。
总结
- 小整数[-5,257)共用对象,常驻内存
- 单个字符共用对象,常驻内存
- 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁
- 字符串(含有空格),不可修改,没开启intern机制,不共用对象,引用计数为0,销毁 。
- 大整数不共用内存,引用计数为0,销毁
- 数值类型和字符串类型在 Python 中都是不可变的,这意味着你无法修改这个对象的值,每次对变量的修改,实际上是创建一个新的对象 。
相关文章
- Python断言及常用断言函数总结
- 【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0
- 【Python】python 日期操作
- Python操作Mysql实例代码教程在线版(查询手册)_python
- python: 安装DeOldify库:黑白图片上色(Python 3.7.15)
- python工具——pypinyin
- Python中3种内建数据结构:列表、元组和字典
- [Python] Use Static Typing in Python 3.6
- python: 安装DeOldify库:黑白图片上色(Python 3.7.15)
- Python编程:利用python编程实现对基于时间序列的数据(dataframe格式)按照指定时间范围进行单方向关联,不存在的日期补充为默认的NaN
- Python语言学习:解决python版本升级问题集合(python2系列→Python3系列)导致错误的总结集合
- Python语言学习:Python随机生成那些事之随机生成使用方法、案例应用之详细攻略
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
- 深度盘点:30个用于深度学习、自然语言处理和计算机视觉的顶级 Python 库
- Python编程:pycharm控制台字体颜色
- python 设计模式之备忘录模式
- python运维开发常用模块(7)web探测模块pycurl
- python IDLE 背景修改 IDLE (Python GUI)
- Python极简地创建HTTP服务器
- python里使用enum库创建枚举类型
- python基础===一行 Python 代码实现并行(转)
- python基础===pendulum '''Python datetimes made easy.'''
- 【Python】Visual Studio Code 安装&&使用 hello python~~~~