iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 中sys.getsizeof的用法说明
  • 558
分享到

python 中sys.getsizeof的用法说明

pythonsys.getsizeof 2022-06-02 22:06:01 558人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

科班出身的码畜一直被灌输一条上帝圣经:“一个int占4个字节,一个char占1个字节,一个float占4个字节。。。”, 今天看下了python的getsizeof函数,发现Python中各个基本数据类型(对象)占用

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

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

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

int:28float:24string:54list():64{}:288ste():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倍大小!

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

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

补充:使用 sys.getsizeof 查看 python 对象的内存占用

使用 sys.getsizeof 方法可以查看 python 对象的内存占用,单位:字节 (byte)

实际上是调用了 __sizeof__ 方法:


In [35]: import sys

In [36]: sys.getsizeof('hello world')
Out[36]: 60

In [37]: 'hello world'.__sizeof__()
Out[37]: 60

有些数据类型在 python3 和 Python2 中占用的内存是不同的,

例如 range :


# python3
In [38]: sys.getsizeof(range(999))
Out[38]: 48

In [39]: sys.getsizeof(iter(range(999)))
Out[39]: 48

# python2
>>> sys.getsizeof(range(999))
8064
>>> sys.getsizeof(iter(range(999)))
64

关于这个值是怎么算出来的,有待研究~

暂时已知:这个值包括该对象的数值、签名(包括数据类型、参数、调用方式等)等一系列数据所占总内存。可变对象所占内存可能极小,因为对象是指针,指向很大的数据。


In [65]: s = sys.getsizeof

In [66]: s(1)
Out[66]: 28

In [67]: s(11)
Out[67]: 28

In [68]: s(11111111)
Out[68]: 28

In [69]: s(1111111111)
Out[69]: 32

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: python 中sys.getsizeof的用法说明

本文链接: https://www.lsjlt.com/news/10745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作