版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Python中的内存管理之pythonlist内存使用详解使用Python的时候,我们知道list是一个长度可变对的数组,可以通过insert,append和extend轻易的拓展其中的元素个数。也可以使用运算符如:[1]+[2]生成新的数组[1,2]
extend()、"+"、"+="的区别
"+"将两个list相加,会返回到一个新的list对象
append在原list上进行修改,没有返回值
从以下代码可以看到,调用b=b+[3,4]之后,通过id(b)查看b变成了一个新对象。
In[5]:b=[1,2]
In[6]:id(b)
Out[6]:1628740249224
In[7]:b=b+[3,4]
In[8]:id(b)
Out[8]:1628740456520
使用extend()完成相同的步骤,可以看到对象c的id保持和原来的一致
In[9]:c=[1,2]
In[10]:id(c)
Out[10]:1628740392584
In[11]:c.extend([3,4])
In[12]:id(c)
Out[12]:1628740392584
使用"+="连接列表,看到效果和extend()是相同的。
In[1]:a=[1,2]
In[2]:id(a)
Out[2]:1628740021448
In[3]:a+=[3,4]
In[4]:id(a)
Out[4]:1628740021448
结论:减少内存的拷贝,修改一个列表的数据时,应避免使用list1=list1+list2这样的语法。
List的内存使用
一个示例:
In[1]:importsys
In[2]:lst1=[1]
In[3]:lst2=[]
In[4]:lst2.append(1)
In[5]:lst1==lst2
Out[5]:True
In[6]:sys.getsizeof(lst1)
Out[6]:72
In[7]:sys.getsizeof(lst2)
Out[7]:96
可以看到,lst1==lst2,但是当使用sys.getsizeof获取对象的内存大小时,两者却是不同的。
如下图所示,list_a长度为4,当执行append(4)时,底层的数据长度其实申请了4个元素的空间,当再次执行append(5)的时候,不需要再次申请内存。
因为执行append()操作时,Python将一次拓展N个元素的内存,因为一个append操作很可能是很多append操作的开始,通过额外分配内存来减少可能的内存分配和内存copy的次数。
In[1]:importsys
In[2]:l=[]
...:print(f'listinitialsize{sys.getsizeof(l)}')
...:foriinrange(80):
...:cur_size=sys.getsizeof(l)
...:l.append(i)
...:new_size=sys.getsizeof(l)
...:print(f'listlen{i+1}:\tcurrent_size{new_size}\tnew_allocated8*{(new_size-cur_size)/8}')
...:
listinitialsize64
listlen1:current_size96new_allocated8*4.0
listlen2:current_size96new_allocated8*0.0
listlen3:current_size96new_allocated8*0.0
listlen4:current_size96new_allocated8*0.0
listlen5:current_size128new_allocated8*4.0
listlen6:current_size128new_allocated8*0.0
listlen7:current_size128new_allocated8*0.0
listlen8:current_size128new_allocated8*0.0
listlen9:current_size192new_allocated8*8.0
listlen10:current_size192new_allocated8*0.0
listlen11:current_size192new_allocated8*0.0
listlen12:current_size192new_allocated8*0.0
listlen13:current_size192new_allocated8*0.0
listlen14:current_size192new_allocated8*0.0
listlen15:current_size192new_allocated8*0.0
listlen16:current_size192new_allocated8*0.0
listlen17:current_size264new_allocated8*9.0
listlen18:current_size264new_allocated8*0.0
listlen19:current_size264new_allocated8*0.0
listlen20:current_size264new_allocated8*0.0
listlen21:current_size264new_allocated8*0.0
listlen22:current_size264new_allocated8*0.0
listlen23:current_size264new_allocated8*0.0
listlen24:current_size264new_allocated8*0.0
listlen25:current_size264new_allocated8*0.0
listlen26:current_size344new_allocated8*10.0
listlen27:current_size344new_allocated8*0.0
listlen28:current_size344new_allocated8*0.0
listlen29:current_size344new_allocated8*0.0
listlen30:current_size344new_allocated8*0.0
listlen31:current_size344new_allocated8*0.0
listlen32:current_size344new_allocated8*0.0
listlen33:current_size344new_allocated8*0.0
listlen34:current_size344new_allocated8*0.0
listlen35:current_size344new_allocated8*0.0
listlen36:current_size432new_allocated8*11.0
listlen37:current_size432new_allocated8*0.0
listlen38:current_size432new_allocated8*0.0
listlen39:current_size432new_allocated8*0.0
listlen40:current_size432new_allocated8*0.0
listlen41:current_size432new_allocated8*0.0
listlen42:current_size432new_allocated8*0.0
listlen43:current_size432new_allocated8*0.0
listlen44:current_size432new_allocated8*0.0
listlen45:current_size432new_allocated8*0.0
listlen46:current_size432new_allocated8*0.0
listlen47:current_size528new_allocated8*12.0
listlen48:current_size528new_allocated8*0.0
listlen49:current_size528new_allocated8*0.0
listlen50:current_size528new_allocated8*0.0
listlen51:current_size528new_allocated8*0.0
listlen52:current_size528new_allocated8*0.0
listlen53:current_size528new_allocated8*0.0
listlen54:current_size528new_allocated8*0.0
listlen55:current_size528new_allocated8*0.0
listlen56:current_size528new_allocated8*0.0
listlen57:current_size528new_allocated8*0.0
listlen58:current_size528new_allocated8*0.0
listlen59:current_size640new_allocated8*14.0
listlen60:current_size640new_allocated8*0.0
listlen61:current_size640new_allocated8*0.0
listlen62:current_size640new_allocated8*0.0
listlen63:current_size640new_allocated8*0.0
listlen64:current_size640new_allocated8*0.0
listlen65:current_size640new_allocated8*0.0
listlen66:current_size640new_allocated8*0.0
listlen67:current_size640new_allocated8*0.0
listlen68:current_size640new_allocated8*0.0
listlen69:current_size640new_allocated8*0.0
listlen70:current_size640new_allocated8*0.0
listlen71:current_size640new_allocated8*0.0
listlen72:current_size640new_allocated8*0.0
listlen73:current_size768new_allocated8*16.0
listlen74:current_size768new_allocated8*0.0
listlen75:current_size768new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国食品饮料包装行业产品创新市场需求品牌竞争市场潜力分析
- 2026汽车美容行业消费需求分析及产业规模规划研究报告
- 2026中国植物蛋白饮料行业市场竞争格局与品牌建设策略报告
- 2026中国新能源汽车行业政策支持与市场拓展策略评估报告
- 2026中国医药研发行业供需分析及投资评估规划分析研究报告
- 2026汽车自动驾驶传感器系统开发方案研究
- 2026食品加工设备行业技术创新与产能升级研究研究报告
- 2026人工智能零售行业现状需求供给分析投资评估规划行业发展趋势
- 2026杂志封面面试题及答案
- 2026招教幼儿面试题目及答案
- 2025年中考数学一轮复习知识清单专题12 多边形与平行四边形(2大模块知识梳理+10个考点+2个重难点+1个易错点)(原卷版)
- 《贝聿铭建筑设计解析》课件
- 2024风电工程项目划分详表
- 北师大八年级数学上册位置与坐标《确定位置》示范公开课教学课件
- 《简爱》阅读任务单三
- 钢结构施工组织设计【超完美版】
- 自然辩证法学习通超星期末考试答案章节答案2024年
- 衢州离婚协议书范文2023标准版
- 职业技术学校云计算技术应用专业《岗位实习》课程标准
- AQ/T 2056-2016 金属非金属矿山在用空气压缩机安全检验规范 第2部分:移动式空气压缩机(正式版)
- 舞台化妆计划书
评论
0/150
提交评论