首页 > 其他分享 >对sys.getsizeof()提取变量大小的理解

对sys.getsizeof()提取变量大小的理解

时间:2023-02-27 11:26:16浏览次数:44  
标签:ob 提取 int 内存大小 python sys getsizeof

python-sys.getsizeof的使用

科班出身的码畜一直被灌输一条上帝圣经:“一个int占4个字节,一个char占1个字节,一个float占4个字节。。。”,

今天看下了python的getsizeof函数,发现python中各个基本数据类型(对象)占用的内存大小和c++/Java完全不一样~

 

前提概述:python中一切都是对象,so python中其实根本不存在int float这些类型,int其实是一个python对象。

int:28
float:24
string:54
list():64
{}:288
ste():224


此外,

(1)sys.getsizeof只计算实际使用的内存大小,引用所消耗的内存大小不计算。

(2)sys.getsizeof只能作为计算内存大小的参考~

 

这里有一个问题,为什么python各个数据类型占用大小和c++中不一致呢?

这里本质上是由python的实现所决定的,python代码在运行的时候会由python解析器执行,具体会解析为C语言的某种结构。也就是说,python中的一个int(或其他)映射到c语言中会是一种复杂结构体。

以python的int为例说明,下面是python的int在C中的具体形式:

typedef struct {
PyObject_HEAD
long ob_ival;
} PyIntObject;
struct _longobject {
long ob_refcnt; // 引用计数
PyTypeObject *ob_type; //变量类型
size_t ob_size; //实际占用内容大小
long ob_digit[1]; //存储的实际python值
};

  

发现没有,python实际的值只是相应C结构中的一个属性,难怪python的int占28个字节,而C语言只需要4个字节,因为python还存储了很多相关的其他信息!其他信息是实际数值的6倍大小!

 

ps:想要精准控制内存大小,使用c++或者Java吧~

 

更多学习笔记可以关注我的微信公众号「kelly学挖掘」,欢迎交流。

 

参考资料:

https://www.laurentluce.com/posts/python-integer-objects-implementation/

https://jakevdp.github.io/PythonDataScienceHandbook/02.01-understanding-data-types.html

https://www.python.org/dev/peps/pep-0237/
————————————————
版权声明:本文为CSDN博主「我是乔木」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qm5132/article/details/100557950

标签:ob,提取,int,内存大小,python,sys,getsizeof
From: https://www.cnblogs.com/sddai/p/17158988.html

相关文章

  • systemctl开启、关闭、重启nginx的实现
    最近在配置tomcat和nginx的时候发现这些命令并不能直接用systemctl,其实很容易实现的。下面就是蜜蜂实现用systemctl来开启、关闭、重启nginx的过程,其他的也都大差不差。首先......
  • system.map u-boot.map
    System.map linuxkernel编译后产生的System.map文件是通过如下命令生成的nmvmlinux|sort|less上图中的第二列表示符号类型,如果是小写字母,一般表示局部性,......
  • 使用sys用户imp导入数据遇到字符集转换后列长度不够报错
    使用sys用户imp数据遇到字符集转换时列长度不够的报错,ORA-12899:valuetoolargeforcolumn"SYS"."M_ASH"."ACTION"(actual:40,maximum:32)。从报错可以看到具体的表......
  • Windows wsl2支持systemd
    背景很多Linux发行版都是使用systemd来管理程序进程,但是在WSL中默认是用init来管理进程的。为了符合长久的使用习惯,且省去不必要的学习成本,就在WSL的发行版(我这里安装的......
  • system管理kafka
    [root@ajsh-dev006systemd]#cat/usr/lib/systemd/system/kafka.service[Unit]Description=kafka[Service]User=rootLimitNOFILE=65535LimitNPROC=65535Environ......
  • system管理zookeeper
    [root@ajsh-dev006systemd]#cat/usr/lib/systemd/system/zk.service[Unit]Description=zookeeper.serviceAfter=network.target[Service]User=rootGroup=root......
  • 遥感数据机器学习的准备工作:python将栅格数据提取至EXCEL
    大部分我们处理的降水、气温等栅格数据的格式是nc形式,需要我们将他转换成栅格数据并导入至Arcgis中,进行下一步操作。之后我们根据自己的研究区进行裁剪【SpatialAnalyst......
  • The remote system refused the connection.
    今天学习Linux时虚拟机通过SecureCRT连接Linux服务器时,报错:Theremotesystemrefusedtheconnection.https://blog.csdn.net/weixin_44212983/article/details/1175382......
  • VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image)
    VMwareESXi7.0Update3kStandard&AllCustomImageforESXi7.0U3kInstallCD请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作品,转......
  • 浅谈Python的\__sizeof__()和getsizeof()
    浅谈Python的_sizeof_()和getsizeof()_sizeof_()返回内存中的大小,单位字节|__sizeof__(self,/)|Returnssizeinmemory,inbytes.getsizeof()这是s......