位置: 编程技术 - 正文

浅谈Python 对象内存占用(python的对象)

编辑:rootadmin

推荐整理分享浅谈Python 对象内存占用(python的对象),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python对象包括哪些,python对象的方法,python对象的三个要素,python对象的方法,python对象的属性和方法,python对象的三个要素,python3对象,python对象包括哪两大类,内容如对您有帮助,希望把文章链接给更多的朋友!

一切皆是对象

在 Python 一切皆是对象,包括所有类型的常量与变量,整型,布尔型,甚至函数。 参见stackoverflow上的一个问题 Is everything an object in python like ruby

代码中即可以验证:

# everythin in python is object def fuction(): return print isinstance(True, object) print isinstance(0, object) print isinstance('a', object) print isinstance(fuction, object)

如何计算

Python 在 sys 模块中提供函数 getsizeof 来计算 Python 对象的大小。

当然,对象内存占用与 Python 版本以及操作系统版本关系密切, 本文的代码和测试结果都是基于 windows7 位操作系统。

import sys print sys.version

2.7.2 (default, Jun , ::) [MSC v. bit (Intel)]

基本类型

&#;布尔型

print 'size of True: %d' % (sys.getsizeof(True)) print 'size of False: %d' % (sys.getsizeof(False))

输出:

size of True: size of False:

&#;整型

# normal integer print 'size of integer: %d' % (sys.getsizeof(1)) # long print 'size of long integer: %d' % (sys.getsizeof(1L)) print 'size of big long integer: %d' % (sys.getsizeof(L)) 输出:

size of integer: x size of long integer 1L: size of long integer L:

可以看出整型占用字节,长整型最少占用字节,且占用空间会随着位数的增多而变大。 在2.x版本,如果整型类型的值超出sys.maxint,则自动会扩展为长整型。而 Python 3.0 之后,整型和长整型统一为一种类型。

&#;浮点型

print 'size of float: %d' % (sys.getsizeof(1.0))

输出:

size of float:

浮点型占用个字节。超过一定精度后会四舍五入。

参考如下代码:

print 1. print 1.

输出:

1. 1.

浅谈Python 对象内存占用(python的对象)

&#;字符串

# size of string type print 'rn'.join(["size of string with %d chars: %d" % (len(elem), sys.getsizeof(elem)) for elem in ["", "a", "ab"]]) # size of unicode string print 'rn'.join(["size of unicode string with %d chars: %d" % (len(elem), sys.getsizeof(elem)) for elem in [u"", u"a", u"ab"]])

输出:

size of string with 0 chars: size of string with 1 chars: size of string with 2 chars: size of unicode string with 0 chars: size of unicode string with 1 chars: size of unicode string with 2 chars:

普通空字符串占个字节,每增加一个字符,多占用1个字节。Unicode字符串最少占用个字节,每增加一个字符,多占用2个字节。

集合类型

&#;列表

# size of list type print 'rn'.join(["size of list with %d elements: %d" % (len(elem), sys.getsizeof(elem)) for elem in [[], [0], [0,2], [0,1,2]]])

输出:

size of list with 0 elements: size of list with 1 elements: size of list with 2 elements: size of list with 3 elements:

可见列表最少占用个字节,每增加一个元素,增加4个字节。但要注意,sys.getsizeof 函数并不计算容器类型的元素大小。比如:

print 'size of list with 3 integers %d' % (sys.getsizeof([0,1,2])) print 'size of list with 3 strings %d' % (sys.getsizeof(['0','1','2']))

输出:

size of list with 3 integers size of list with 3 strings

容器中保存的应该是对元素的引用。如果要准确计算容器,可以参考recursive sizeof recipe 。使用其给出的 total_size 函数:

print 'total size of list with 3 integers %d' % (total_size([0,1,2])) print 'total size of list with 3 strings %d' % (total_size(['0','1','2']))

输出为:

total size of list with 3 integers total size of list with 3 strings

可以看出列表的空间占用为 基本空间 + (对象引用 4 + 对象大小) * 元素个数。

另外还需注意如果声明一个列表变量,则其会预先分配一些空间,以便添加元素时增加效率:

li = [] for i in range(0, ): print 'list with %d integers size: %d, total_size: %d' % (i, getsizeof(li), total_size(li)) li.append(i)

&#;元组

基本与列表类似,但其最少占用为个字节。

&#;字典

字典的情况相对复杂很多,具体当然要参考代码 dictobject.c, 另外 NOTES ON OPTIMIZING DICTIONARIES 非常值得仔细阅读。

基本情况可以参考[stackoverflow] 的问题 Python's underlying hash data structure for dictionaries 中的一些回答:

&#;字典最小拥有8个条目的空间(PyDict_MINSIZE);&#;条目数小于,时,每次增长4倍;&#;条目数大于,时,每次增长2倍;&#;键的hash值缓存在字典中,字典调整大小后不会重新计算;

每接近2/3时,字典会调整大小。

以上这篇浅谈Python 对象内存占用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

python 性能提升的几种方法 关于python性能提升的一些方案。一、函数调用优化(空间跨度,避免访问内存)程序的优化核心点在于尽量减少操作跨度,包括代码执行时间上的跨度

python 实现网上商城,转账,存取款等功能的信用卡系统 一、要求二、思路1.购物类buy接收信用卡类的信用卡可用可用余额,返回消费金额2.信用卡(ATM)类接收上次操作后,信用卡可用余额,总欠款,剩余欠

Python在线运行代码助手 Python代码运行助手可以让你在线输入Python代码,然后通过本机运行的一个Python脚本来执行代码。原理如下:在网页输入代码:点击Run按钮,代码被发送

标签: python的对象

本文链接地址:https://www.jiuchutong.com/biancheng/386210.html 转载请保留说明!

上一篇:python发送邮件功能实现代码(python发送邮件的模块)

下一篇:python 性能提升的几种方法(python3.10性能)

  • 年报纳税总额能查到吗
  • 非货币性资产交换补价大于25%的会计处理
  • 新个税计算公式怎么输入excel
  • 租地建厂房房产税谁交
  • 固定资产的折余价值计算公式
  • 小规模未达起征点
  • 教育行业主营业务内容
  • 小规模纳税人怎么变成一般纳税人
  • 所得税季报填错了已经申报了
  • 电子税务局助信码领取后怎么用
  • 新准则下怎么调整长期股权投资损益调整
  • 发票金额小于入库金额
  • 无形资产和固定资产的折旧
  • 接受现金捐赠怎么写分录
  • 盘亏材料10000元,可以回收的保险赔偿
  • 发票税表抵扣了账务未抵扣账务处理怎么做?
  • 包装材料报废后如何做会计核算?
  • 专项补助资金补助的领域包括
  • 以前年度长期股权投资漏记调整
  • 季度交的企业所得税怎么做账
  • 企业所得税研发费用100%扣除的有哪些企业
  • 电子厂税负率一般是多少
  • 三证合一后还要去税务局吗
  • 超市购物卡开票可以做账吗
  • 建筑施工单位可以安装电表吗
  • 银票贴现需要发票嘛
  • 凭证金额多记了,已经入账了怎么办
  • 利息收入记账凭证格式范本
  • 系统更新没有推送
  • 评估报告怎么算合法
  • 企业向个人的借款合同
  • 关闭windows安全中心拦截
  • 商业承兑汇票提示承兑期限
  • 房地产开发企业分为几个等级
  • 收到发票已入账什么意思
  • win10显示所有应用
  • 企业存货成本包括利润吗
  • 销售费用的类型
  • 控股公司的账务处理
  • 一般纳税人增值税优惠政策2023
  • 若依前后端分离做的系统
  • laravel模板引擎
  • 有限责任公司股东对公司债务承担
  • 房产税的征税范围为
  • 梅萨维德国家公园特点
  • 固定资产减少的账务处理
  • 2023版最新最全React面试题
  • 分页limit参数
  • 看望职工家属可以计入福利费吗
  • 厂房推倒重建和改扩建的税务处理
  • 帝国cms自定义列表
  • 罚款记入其他应收款科目
  • 垫付应收款怎么做会计分录
  • 委托加工物资科目贷方登记的内容有什么
  • 上年期末留底税额怎么算
  • 跨年银行回单怎么入账
  • 财务费用利息属于什么科目
  • 教育协会颁发的证书有用吗?
  • 研发支出费用化支出期末有余额吗
  • 房地产企业扣除项目
  • 应交税费的记账分录
  • 差旅费属于什么会计要素
  • 农产品没有发票怎么办
  • 三方抵账协议做什么科目
  • sqlserver合并脚本工具
  • mysql 全量备份
  • ubuntu 安装指定位置
  • xpkw
  • 打开安全启动
  • ngctw32.exe - ngctw32是什么进程 有什么用
  • window8设置ip
  • js内存释放
  • nodejs实战教程
  • jquery 获得焦点
  • js字符串编码解码
  • 判断文件是否存在 java
  • JavaScript的函数定义
  • 如何用jquery
  • jquery获取值的几种方法
  • 深圳纳税信息查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设