python进阶教程3:内存池、内存分配优化
文章目录
-  -  - 内存池技术
-  - 1. 小整数对象
- 2. 字符串驻留
-  - 2.1 什么时候发生驻留
-  - 2.1.1 编译时发生驻留,运行时不驻留
- 2.1.2 只含大小写字母、数字、下划线时发生驻留
- 2.1.3 字符串长度为0或1
- 2.1.4 被sys.intern指定驻留
- 2.1.5 用乘法(*) 得到的字符串
 
 
 
- python 列表, 元组内存分配优化
-  - 1. 空元组与空列表
- 2. 小元组的分配优化
- 3. 列表大小调整
 
- Python在存储字符串时如何节省内存
-  - 1. 字符串大小
-  - 1.1 空字符串
- 1.2 ascii码表里的字符
- 1.3 汉字
- 1.4 特殊字符
 
- 2. 定长编码
 
 
 
-  
内存池技术
如果对象频繁的创建和销毁,就会产生很多内存碎片,最终会影响的系统的性能。而实际应用中,我们确实在做这样的事情,尤其是对小整数的使用,比如1,2, 5 这些int类型的数据,几乎每一次使用for循环都会用到他们,ok,现在我们掌握了两个关键信息
- 小的整数频繁被使用,频繁被销毁
- 频繁的创建对象销毁对象将产生内存碎片
 那么,python的发明及维护人员允许这样的事情发生么?显然不能!
1. 小整数对象
如果没有什么特殊的机制,小整数的频繁创建与销毁将影响系统的性能,因此,python提供了对象池技术。int类型数据是不可变对象,这意味着它可以被共享,在python启动之后,就会在内存中申请一片内存,将频繁使用的小整数存储在这里,在整个程序运行期间,这些小整数都一直存在,不会被销毁,对他们的使用,仅仅增加了他们的引用计数而已。
有多少整数被缓存了呢,这个范围很小,[-5, 257), 你可能会对这个小整数范围表示有异议,这很正常,每个人对频繁使用的小整数有自己的理解,所以,如果你希望扩大这个范围,可以修改python的源码,然后重新编译,不过这很费力气。
我们可以在python交互式解释器里来验证这个小整数缓存池是否真实的存在
