python查看对象占用内存_『Python』内存分析_List对象内存占用分析
list声明后结构大体分为3部分,变量名称--list对象(结构性数据+指针数组)--list内容,其中id表示的是list对象的位置,
v引用变量名称,v[:]引用list对象,此规则对python其他序列结构也成立,以下示范可用id佐证,
a=b时,a和b指向同一个list对象
a=b[:]时,a的list对象和b的list对象指向同一个list内容
Q1:元素存储地址是否连续
首先见得的测试一下list对象存储的内容(结构3)的内存地址,
In [1]: a=[1,2,3,‘a‘,‘b‘,‘c‘,‘de‘,[4,5]]
In [2]: id(a)
Out[2]: 139717112576840
In [3]: for i in a:
...: print(id(i))
...:
139717238769920
139717238769952
139717238769984
139717239834192
139717240077480
139717240523888
139717195281104
139717112078024
In [4]: for i in a[6]:
...: print(id(i))
...:
139717240220952
139717240202048
In [5]: for i in a[7]:
...: print(id(i))
...:
139717238770016
139717238770048
然后看一下相对地址,
In [6]: for i in a:
...: print(id(i)-139717238769920)
...:
0
32
64
1064272
1307560
1753968
-43488816
-126691896
In [7]: for i in a[6]:
...: print(id(i)-139717238769920)
...:
1451032
1432128
In [8]: for i in a[7]:
...: print(id(i)-139717238769920)
...:
96
128
可见,对于list对象,其元素内容并不一定线性存储,但是由于内存分配的问题,会出现线性存储的假象,当元素出现容器或者相对前一个元素类型改变时,内存空间就会不再连续。
Q2:list对象地址和元素地址是否连续
其实Q1已经回答了这个问题,毕竟元素地址本身就不连续,不过我们还是测试了一下,
In [22]: id(a[0])-id(a)
Out[22]: 126193080
相差甚远,而且我们分析源码可知,list对象主体是一个指针数组,也就是id(a)所指的位置主体是一个指向元素位置的指针数组,当然还有辅助的对象头信息之类的(python中几个常见的“黑盒子”之 列表list)。
Q3:list对象(不含元素)占用内存情况分析
In [16]: sys.getsizeof([1,2,3,‘a‘,‘b‘,‘c‘,‘de‘])
Out[16]: 120
In [17]: sys.getsizeof([1,2,3,‘a‘,‘b‘,‘c‘])
Out[17]: 112
In [18]: sys.getsizeof([1,2,3,‘a‘,‘b‘])
Out[18]: 104
可见,list每一个对象占用8字节32位空间,我们来看切片,
In [20]: sys.getsizeof(a[:3])
Out[20]: 88
In [21]: sys.getsizeof(a[:4])
Out[21]: 96
In [23]: sys.getsizeof(a[3:4])
Out[23]: 72
In [24]: sys.getsizeof(a[3:5])
Out[24]: 80
切片对象也是每个元素占8字节,但是切片也是list对象,即使从中间切(不切头),也会包含头信息的存储占用。
附注
1、[0]和[:1]的不同
In [30]: a[0]
Out[30]: 1
In [31]: a[:1]
Out[31]: [1]
2、空list占用空间
In [32]: sys.getsizeof([])
Out[32]: 64
python查看对象占用内存_『Python』内存分析_List对象内存占用分析相关推荐
- linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...
背景 提出两个需求 占满系统CPU 占用大内存 通过上网查资料,做实验使用Python实现了上述两个需求. 先看效果 执行前 内存 CPU 执行后 内存 CPU 代码实现 环境说明:代码使用Pytho ...
- python gc内存_禁用 Python GC,Instagram 性能提升10%
通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...
- python 内存_一行Python解决内存问题
原标题:一行Python解决内存问题 内存不足是项目开发过程中经常碰到的问题,我和我的团队在之前的一个项目中也遇到了这个问题,我们的项目需要存储和处理一个相当大的动态列表,测试人员经常向我抱怨内存不足 ...
- 将整数k转换成实数python表达式_『Python基础-5』数字,运算,转换
『Python基础-5』数字,运算,转换 目录 基本的数字类型 二进制,八进制,十六进制 数字类型间的转换 数字运算 1. 数字类型 Python 数字数据类型用于存储数学上的值,比如整数.浮点数.复 ...
- python字典的存储结构_解决python字典结构内存暴涨问题
背景:当读取一个key value数据的时候,python的字典结构会造成内存使用扩10倍左右,无可容忍.此文解决这个问题 数据:word2vec训练的结果,word对应400维的词向量.词表共1.6 ...
- python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python中response对象的属性_关于python:AttributeError:’HTTPResponse’对象没有属性’split’...
我正在尝试从Google财经获取一些信息,但出现此错误 AttributeError: 'HTTPResponse' object has no attribute 'split' 这是我的pytho ...
- python处理音频的软件_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python什么时候用框架_关于python:框架和对象之间有什么区别,什么时候应该修改另一个?...
我开始阅读python的+=语法,无意中发现了以下文章/答案:关于的交互式代码+= 所以我注意到帧和对象之间似乎有区别. . 在全局框架中,它们指向同一对象,即使它们是不同的变量:如果 l2 += [ ...
最新文章
- 自定义数字格式字符串输出示例
- 设计模式 - 基本功的重要性
- 官宣:神策数据证券行业解决方案,全新上线官网!
- JVM详解之:汇编角度理解本地变量的生命周期
- 汽车行业中的AUTOSAR与OSEK到底是什么,有什么区别
- pyinstaller---将py文件打包成exe
- java和python哪个学习编程_初学编程,选Java还是Python?
- window下远程监控linux下tomcat的jvm
- 前端基础-html-路径的介绍
- 栈溢出笔记1.6 地址问题(1)
- qt 增加的翻译没有作用上_Qt翻译文件使用方法
- keil中下载按钮和调试按钮灰掉了
- SQL Server BI Step by step 1 AdventureWorks数据库的安装
- nmap超快高效扫描端口
- mysql间隙锁_mysql的间隙锁
- (二)mybatisPlus实现ActiveRecord(AR)操作
- 【后端】--process information unavailable解决办法[详细版]
- 计算机和机械类哪个工资高,机械类专业就业方向 哪个方向工资高
- LeetCode849. 到最近的人的最大距离
- POJ - 2008 Moo University - Team Tryouts
热门文章
- 亲测 asp.net 调用 webservice返回json
- Android开发--apk的生成
- CentOS Linux解决Device eth0 does not seem to be present【转】
- Android4.0升级新特性
- TextBoxWatermarkExtender扩展器与RequiredFieldValidator控件相冲突的解决方案
- BC之旅(13) — 农庄的残冬
- python3.8.4rc1_Python3.8.4rc1 官方正式版
- java中找不到javax包_logstash 找不到 java 环境
- maven netty 配置_使用Springboot整合开发Netty(一个表白的小案例)
- 金蝶k3财务接口_记录用友T+接口对接的心酸历程