python list tuple 消耗_Python内存消耗:dict VS元组列表

在这种情况下,你实际上得到了一个不完整的内存使用图片。字典的总大小以不规则的间隔增加一倍以上,如果在字典大小增加后比较这两个结构的大小,它会再次变大。一个带有递归大小函数的简单脚本(见下面的代码)显示了一个非常清晰的模式:i: 2 list size: 296 dict size: 328 difference: -32

i: 3 list size: 392 dict size: 352 difference: 40

i: 4 list size: 488 dict size: 376 difference: 112

i: 5 list size: 616 dict size: 400 difference: 216

i: 7 list size: 808 dict size: 1216 difference: -408

i: 10 list size: 1160 dict size: 1288 difference: -128

i: 13 list size: 1448 dict size: 1360 difference: 88

i: 17 list size: 1904 dict size: 1456 difference: 448

i: 23 list size: 2480 dict size: 3904 difference: -1424

i: 31 list size: 3328 dict size: 4096 difference: -768

i: 42 list size: 4472 dict size: 4360 difference: 112

i: 56 list size: 5912 dict size: 4696 difference: 1216

i: 74 list size: 7880 dict size: 5128 difference: 2752

i: 100 list size: 10520 dict size: 14968 difference: -4448

i: 133 list size: 14024 dict size: 15760 difference: -1736

i: 177 list size: 18672 dict size: 16816 difference: 1856

这种模式随着i的增长而继续。(您可以使用您的方法对此进行测试——尝试在2636744附近设置i。字典的大小在那一点上更大,至少对我来说是这样的。)Martijn正是元组列表中的元组增加了内存开销,抵消了列表相对于字典的内存优势。但平均来说,结果并不是字典更好,而是字典差不多一样。所以在回答你最初的问题时:When you want to store LOTS of key-value data in memory, which data structure is more memory-efficient, a dict or a list of tuples?

如果你只关心记忆,那其实并不重要。

但是,请注意,遍历字典通常比遍历列表慢一点,因为没有好的方法可以避免遍历字典中的所有空容器。所以有一个折衷的办法——字典在随机键查找上要快得多,而列表在迭代上要快得多。字典在大多数情况下可能会更好,但在一些罕见的情况下,列表可能会提供微观优化。

这是测试大小的代码。它可能不会为所有的角点情况生成正确的结果,但是它应该处理这样的简单结构而不会有任何问题。(但如果你发现任何问题,请告诉我。)import sys, collections, itertools, math

def totalsize(x):

seen = set()

return ts_rec(x, seen)

def ts_rec(x, seen):

if id(x) in seen:

return 0

else:

seen.add(id(x))

x_size = sys.getsizeof(x)

if isinstance(x, collections.Mapping):

kv_chain = itertools.chain.from_iterable(x.iteritems())

return x_size + sum(ts_rec(i, seen) for i in kv_chain)

elif isinstance(x, collections.Sequence):

return x_size + sum(ts_rec(i, seen) for i in x)

else:

return x_size

for i in (10 ** (e / 8.0) for e in range(3, 19)):

i = int(i)

lsize = totalsize([(x, x) for x in xrange(i)])

dsize = totalsize(dict((x, x) for x in xrange(i)))

print "i: ", i,

print " list size: ", lsize, " dict size: ", dsize,

print " difference: ", lsize - dsize

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 项目构建工具_GitHub - shjlone/emake: 你见过的最简单的 GCC/CLANG 项目构建工具(python3版本)...

python3实现版本PrefaceGNU Make 太麻烦?Makefile 写起来太臃肿?头文件依赖生成搞不定?多核同时编译太麻烦?Emake 帮你解决这些问题:使用简单:设定源文件,设定编译参数和输出目标就行了&#xf…

18135usm_佳能PZ-E1+EF-S 18-135mm f/3.5-5.6 IS USM镜头 小型工作室的利器

EF-S 18-135mm f/3.5-5.6 IS USM 在大神眼里据对是属于狗头系列的 哈哈哈 但是这货如果搭配佳能的 PZ-E1 在配合佳能80D 那绝对是小型视频工作室的首选 !!!mxcpTB2rqUOg80kpuFjSsppXXcGTXXa_!!104284319.jpg (156.5 KB, 下载次数: 1)2017-3-…

开启php缩略图,PHP生成缩略图

//参数1 文件名 参数2 缩放比例function _thumb($_filename,$_percent){ob_clean();//生成png标头文件header(Content-type:image/png);$_nexplode(., $_filename);//获取文件的信息,宽和高list($_width,$_height)getimagesize($_filename);//生成缩略后的大小$_new_wid…

php项目中sql,php – 大括号{}在SQL查询中做了什么?

有关双引号字符串语法,请参见http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing.花括号用于复杂的变量表达式.它们由PHP解释,而不是由SQL接口解释.$query "SELECT * FROM users WHERE user$_POST[username] AND password$_POST[pas…

php获取本机ip外网地址,php获取本机ip(远程IP地址)

例子,php获取用户IP地址。复制代码 代码示例:// 111111111111echo $_SERVER[REMOTE_ADDR];// 2222222222222function get_local_ip() {$preg "/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25…

php打png图片水印颜色失真,ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整...

/**———————————————————-* 为图片添加水印———————————————————-* static public———————————————————-* param string $source 原文件名* param string $water 水印图片* param string $$savename 添加水印后的图片名…

java服务器要二次编译,ecology项目二次开发环境搭建

ecology项目二次开发环境搭建Submitted By Weaver文档版本控制文档简要信息:文档主题(Title)ecology项目二次开发环境搭建作者(Author)审批者 (To Be Approved By)说明 (Comments)ecology项目二次开发环境搭建文件名称 (File Name)文档版本历史:序号日期…

matlab基础试题,MATLAB基础试题题目及答案,课程2020最新期末考试题库,章节测验答案...

【判断题】手指第一关节应该始终保持支撑。【单选题】如果陈先生购买了一套 200 万的住房(家庭首套住房),房屋面积为 105 平方米,容积率为 3.0, 房价低于当地平均价格,则他要缴纳的契税为( )万元。在做高抬指练习时注意下键速度要…

乘法口诀表编程php视频,PHP学习之制作乘法口诀表

进入学习php语言状态。昨日看了一天视频。才能够把这个小口诀表实现。好难啊。里面有个口诀表的函数、echo "";for ($a1;$a<9;$a){ //循环输出a a默认值是1 a的值不会大于9 且不断加一for ($b1;$b<$a;$b){//{b默认值是1 且b值不能大于a值 也就是九 加一运算/*一…

列车matlab模型,【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-数模培训-全国赛论文-京沪线列车调度模型(B题)...

【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-数模培训-全国赛论文-京沪线列车调度模型(B题) 答卷编号&#xff1a; 答卷编号&#xff1a; 论文题目&#xff1a; 京沪线列车调度模型(B题) 参赛队员&#xff1a; 1. 唐欢 电话&#xff1a;13100251389 2. 任礼秋…

如何学习matlab 知乎,知乎日报

利用记忆软件 Anki 进行复习&#xff1a;先看一下效果&#xff1a;通过编程(Matlab 程序 main.m)把一集美剧中的每一句话的中英文和语音都分离出来&#xff0c;输入 Anki 进行复习。制作每一集的学习包的大概流程如下&#xff1a;下面是详细步骤&#xff1a;* 流程只适用于装了…

php javascript对象,JavaScript 对象

JavaScript 对象JavaScript 对象是拥有属性和方法的数据。真实生活中的对象&#xff0c;属性和方法真实生活中&#xff0c;一辆汽车是一个对象。对象有它的属性&#xff0c;如重量和颜色等&#xff0c;方法有启动停止等:对象属性方法car.name Fiatcar.model 500car.weight 8…

oracle12c 删除pdb用户,oracle 12c pdb测试:创建、开关、删除

pdb测试&#xff1a;创建、开关、删除-----------------------ORACLE12C中提出来CDB和PDB的概念他们可以分别理解为容器和插件(PDB插入在CDB中)CDB的管理和传统数据库区别不大--确认当前cdbSQL> select name,cdb from v$database;NAME CDB--------- ---ZARADB YES--…

oracle 备份批处理,windows下oracle自动备份批处理

上一篇日志中&#xff0c;我将windows下的备份流程分成了五步走。本日志就结合上篇的理论来个实例。该实例是来自于我现网的中的一个备份示例(不要想着弄我密码啊&#xff0c;内容改过的&#xff0c;呵呵)。费话少说&#xff0c;直接上脚本&#xff1a;eche off//下面一部分是设…

getlasterror返回57怎么解决_王者荣耀:用时最短职业比赛?3分57秒结束,解说都看呆了!...

原标题&#xff1a;王者荣耀&#xff1a;用时最短职业比赛&#xff1f;3分57秒结束&#xff0c;解说都看呆了&#xff01;相信很多人都知道&#xff0c;王者荣耀作为一款手机游戏&#xff0c;虽然节奏比英雄联盟这种端游快得多&#xff0c;但一局比赛也要十分钟左右&#xff0c…

oracle约束 关闭,Oracle约束管理脚本

正在看的ORACLE教程是:Oracle约束管理脚本。作为一个Oracle数据库管理员&#xff0c;会碰到这样的数据库管理需求&#xff0c;停止或者打开当前用户(模式)下所有表的约束条件和触发器。这在数据库的合并以及对数据库系统的代码表中某些代码的修改时需要做的工作之一。我们来看这…

35岁学嵌入式合适吗_什么是嵌入式技术?

物联网应用技术中&#xff0c;嵌入式技术是至关重要的。但是&#xff0c;至少有60%的人不了解什么是嵌入式技术。物联网时代的到来&#xff0c;不管是从行业应用&#xff0c;还是智能硬件的爆发&#xff0c;亦或是大数据等等嵌入式技术都得到了史无前例的发展。简单来说&#x…

cvpr2020 人脸检测与识别_投石科技温度检测人脸识别设备装置

投石科技温度检测人脸识别设备装置内容共分为五大块&#xff0c;包括&#xff1a;行业概况、产品简介、核心功能、产品优势、应用场景。行业概况&#xff1a;人工智能安防即“人工智能安防”&#xff0c;以人工智能技术为核心&#xff0c;形成一系列产品和系统解决方案。近两年…

oracle clearing,ORACLE DBA常用命令集锦(2)

ORACLE DBA常用命令集锦(2)[more]接上篇 ORACLE DBA常用命令集锦(1):sql> revoke create session from scott;7.grant object privilegesql> grant execute on dbms_pipe to public;sql> grant update(first_name,salary) on employee to karen with grant option;8.d…

arrays合并两个数组_每天一道力扣题: 88. 合并两个有序数组

题目给你两个有序整数数组 nums1和nums2&#xff0c;请你将nums2合并到 nums1 中&#xff0c;使nums1成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间&#xff08;空间大小大于或等于 m n&#xff09;来保存 nums2 中…