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

python list tuple 消耗_Python内存消耗:dict VS元组列表相关推荐

  1. python获取字典长度_python中的字典、元组和集合

    一.python中的字典 1.字典的表示方式:{key1:value1,key2:value2,key3:value3}: 2.字典的key通常情况下是字符串,也可以使用其他不可变的数据类型: 3.字 ...

  2. python list tuple区别_Python list、tuple、dict区别

    Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系. 每一个元素都是一个 key-value 对, 整个元素集合用大括号括起来 您可以通过 key 来引用其值 ...

  3. python字典的数据结构_Python数据结构之三——dict(字典)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 知识源于生活.Python也是如此. 提到字典,我首先想到的是数学大师--高斯. 为何想起他呢?这主要是因为高斯算法 ...

  4. python字典功能默写_Python 内存分配时的小秘密

    Python 中的sys模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解释器强交互的函数. 本文将会频繁地使用该模块的getsizeof()方法,因此,我先简要介绍一 ...

  5. python定义map数据_python数据类型之 dict(map)

    字典 一.创建字典 方法①: >>> dict1 = {} >>> dict2 = {'name': 'earth', 'port': 80} >>&g ...

  6. python中set函数_python中的set函数、列表的操作

    原博文 2019-10-31 11:12 − 一.set函数 set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 例题: 1.set函数求交集(&am ...

  7. python字典推导式_python的各种推导式(列表推导式、字典推导式、集合推导式)...

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  8. python定义字典长度_Python学习之字典为何比列表NB

    https://www.zhihu.com/video/1183793788048363520 我们学了列表 , 现在有个需求, 把你们公司每个员工的姓名.年龄.职务.工资存到列表里,你怎么存?sta ...

  9. python默认参数举例_Python之在函数中使用列表作为默认参数

    本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作 ...

最新文章

  1. 2019ICPC(银川) - Largest Common Submatrix(单调栈)
  2. jar构建docker镜像_dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例...
  3. 7 Statistical estimation
  4. java中对象 引用的概念_java中的对象 方法 引用 等一些抽象的概念是什么意思呢?...
  5. 移植qt常见错误修改方法
  6. mysql linux 用户_Linux mysql添加用户,删除用户,以及用户权限
  7. python中inspect的用法(这个难懂,后期再补)
  8. Mac笔记本Postman升级为新版本后,打开时一直转圈,无法使用
  9. Android 轻松实现语音识别详解及实例代码
  10. 树莓派指定python2编译_在树莓派上编译安装ROS2
  11. reactive streams与观察者模式
  12. 小米6Android11刷机包,小米6刷机包MIUI12
  13. 酒店管理系统(功能结构图、E-R图、用例图)
  14. AXD 查看register笔记
  15. 三星android5.0基带,三星手机刷入基带详细图文操作教程
  16. 熵权法STATA程序(第二版修正)
  17. 什么蓝牙耳机适合学生党?内行推荐四款适合学生党的蓝牙耳机
  18. 课堂笔记 - 数据库设计
  19. 5G网络架构与组网部署
  20. 中等职业学校计算机课程标准,全市中等职业学校信息技术课程标准内涵解析与教学设计培训会议成功举办...

热门文章

  1. 硬解析优化_72最近一次现场生产系统优化的成果与开发建议
  2. python nlp_使用python在stanford-nlp中的回指解析
  3. 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
  4. 如何卸载服务器的系统,卸载服务器的操作系统
  5. PP视频如何不允许WiFi下自动播放
  6. Easyui动态加载后台数据的例子
  7. linux系统date s使用,简述Linux下date命令的使用方法与实例
  8. 属性的表示方法和对象的枚举
  9. 函数的作用域以及预编译
  10. php文件防删改,PHP实现增删改查以及防SQL注入