Python内存分配
admin
2023-07-04 09:43:51
0

python中对象内存分配的秘密:
http://note.youdao.com/noteshare?id=4f2a12ca09e6ec21d3ea03d05e2744e9


sys模块是Python比较基础且十分重要的模块
功能: 提供程解释器使用(或者由他维护)的变量,以及和解释器交互的函数

sys模块中的getsizeof()函数用户获取对象所占直接内存字节大小(byte),不计算对象内部引用对象占用内存大小
1.首先我们验证一下上面这句话;

In [2]: import sys                                                                                                                                                        
In [3]: a = [1,2]                                                                                                                                                         
In [4]: b = [a,a]                                                                                                                                                         
In [5]: sys.getsizeof(a)                                                                                                                                                  
Out[5]: 80
In [6]: sys.getsizeof(b)                                                                                                                                                  
Out[6]: 80
In [7]: a                                                                                                                                                                 
Out[7]: [1, 2]
In [8]: b                                                                                                                                                                 
Out[8]: [[1, 2], [1, 2]]
可以看到上面数组,a,b两个列表内部只有两个元素,虽然b列表引用了列表a,但是它所占字节大小a一样,这样就说明了getsizeof()方法是计算当前对象直接所占内存字节大小,不会计算其内部引用.

2,python中空对象所占内存字节

In [4]: sys.getsizeof('')   # 空字符                                                                                                                                                
Out[4]: 49
In [5]: sys.getsizeof([])   # 空列表                                                                                                                                              
Out[5]: 64
In [6]: sys.getsizeof({})   # 空字典                                                                                                                                              
Out[6]: 240
In [7]: sys.getsizeof(())   # 空元组                                                                                                                                             
Out[7]: 48
In [8]: sys.getsizeof(set())# 空集合                                                                                                                                            
Out[8]: 224

占用内存字节对象排序: 基础数字 < 空元祖 < 空字符串 < 空列表 < 空集合 < 空字典
为什么空对象也会占用内存?
解释: 我们可以理解为上述对象都是容器,python在创建的时候分配一部份内存用于对象本身信息的记录,比如(容器结构,引用计数,使用信息等),另一部分用于预分配内存

3.Boolen值占用内存字节数

In [15]: sys.getsizeof(0)                                                                                                                                                 
Out[15]: 24
In [16]: sys.getsizeof(False)                                                                                                                                             
Out[16]: 24
In [17]: sys.getsizeof(1)                                                                                                                                                 
Out[17]: 28
In [18]: sys.getsizeof(True)                                                                                                                                              
Out[18]: 28
通过上面样例我们可以看到,布尔值对象的内存所占字节大小和数字0,1是一样的,应为在Boolen中True和1,False和0,代表的含义是一样的,只是表现形式不一样

4.python的内存分配机制:
(1).超额分配机制:对象在申请内存时候,会多分配一部份内存,当有新的元素加入到对象中,就不会再去请求内存分配,直接使用之前超额分配的内存,这样的话就保证了对象总是会有多余的内存容纳新加入的元素,而不用在加入对象时候再去申请内存操作,提高对象的内存分配性能.
(2).非均匀分配机制; 在分配内存的时候每次分配的内存大小是不一样的,保证了不同元素加入时候,对象中超额的内存总是能够容纳新的元素,不用再加入的时候去申请内存.

相关内容

热门资讯

玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...
谁在对台湾“温水煮青蛙”? 近一段时间以来,两岸的舆论场都非常热闹,但话题却不尽相同。先看看岛内,马英九基金会的“家变”愈演愈烈...
上海磁骋取得超级电容主动均衡电... 国家知识产权局信息显示,上海磁骋交通科技有限公司取得一项名为“一种超级电容主动均衡电路”的专利,授权...
超市运送猪肉时,一只狗跑来啃食... 5月31日,湖北孝昌的网友发布视频称,一家超市在运送猪肉时,肉从车上搬下来后,一只黑色的狗跑来啃食猪...
日本要搞两个首都? 日本媒体日前报道,日本维新会正在推进将大阪设为“副首都”的构想,定于6月中旬组建一个专门小组。对此,...