我不能提供一个完整的策略来帮助改善内存占用,但我相信这可能有助于分析究竟是什么占用了这么多内存。

如果您查看dictionary的Python实现(这是哈希表的相对直接的实现),以及内置字符串和整数数据类型的实现,例如here(特别是object.h、intobject.h、stringobject.h和dictobject.h,以及../Objects中相应的*.c文件),您可以以一定的精度计算预期的空间要求:整数是一个固定大小的对象,即它包含一个引用计数、一个类型指针和实际整数,在32位系统上通常总共至少12个字节,在64位系统上通常至少24个字节,而不考虑可能通过对齐而丢失的额外空间。

字符串对象的大小是可变的,这意味着它包含参考计数

类型指针

尺寸信息

延迟计算哈希代码的空间

状态信息(例如用于interned字符串)

指向动态内容的指针

总共32位至少24字节,64位至少60字节,不包括字符串本身的空间。

字典本身由多个bucket组成,每个bucket包含当前存储的对象的哈希代码(由于使用了冲突解决策略,从bucket的位置无法预测)

指向键对象的指针

指向值对象的指针

总共32位至少有12个字节,64位至少有24个字节。

字典从8个空桶开始,并通过在达到其容量时将条目数加倍来调整大小。

我在32位计算机上对46461个唯一字符串(337670字节串联字符串大小)的列表进行了测试,每个字符串都与一个整数相关联-与您的设置类似。根据上面的计算,我希望最小内存占用为46461*(24+12)字节=字符串/整数组合的1.6 MB

337670=0.3 MB用于字符串内容

65536*12字节=哈希存储桶的1.6 MB(调整大小13次后)

总计2.65 MB。(对于64位系统,相应的计算结果为5.5 MB。)

当Python解释器空闲运行时,根据ps工具,它的内存占用为4.6MB。因此,创建字典后的预期总内存消耗量约为4.6+2.65=7.25 MB。在我的测试中,真正的内存占用(根据ps)为7.6 MB。我猜额外的0.35 MB是由Python的内存分配策略(用于记忆竞技场等)

当然,现在很多人会指出,我使用ps来测量内存占用是不准确的,我对32位和64位系统上指针类型和整数大小的假设在许多特定系统上可能是错误的。授予。

不过,我认为,关键结论是:Python字典实现消耗的内存量非常小

但是,许多int和(特别是)string对象所占用的空间(用于引用计数、预先计算的哈希码等)比您最初想象的要多

只要您使用Python并希望字符串整数表示为单个对象-至少我不知道怎么做

寻找(或实现自己的)一个实现散列的Python-C扩展可能是值得的,该散列将键和值存储为C指针(而不是Python对象)。我不知道这是否存在,但我相信这是可以做到的,可以将内存占用减少一半以上。

python字典占内存_Python:减少字典的内存使用相关推荐

  1. python字典内存分析_Python减少字典对象占用的七成内存

    程序执行过程中,如果RAM中有大量的对象在运行,就可能会出现内存问题,特别是在对可用内存总量有限的情况下. 下面是一些减少字典对象内存大小的方法,这些方法可以显著减少对象所需的RAM大小. 字典 在P ...

  2. python编程字典100例_python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...

  3. [转载] python里字典的用法_python中字典(Dictionary)用法实例详解

    参考链接: Python字典dictionary copy方法 本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映 ...

  4. python字典操作技巧_python的字典使用方法大全

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 . 键一般是唯一的,如 ...

  5. python字典转换为列表_Python中将字典转换为列表的方法

    说明:列表不可以转换为字典 ①转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) p ...

  6. python如何读取字典的关键字_python提取字典元素

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我有一本字典d = {1:-0.3246, 2:-0.9185, 3:-3985 ...

  7. python 字典 删除指定_python删除字典中的某个值

    Q1:python中字典不用了怎么删除 如果你要删除整个变量,python里面垃圾是自动收集的,不用你太去关心.一定要用,就del 变量名. 如果你是要修改一个字典的内容,比如从里面删除一个元素,一般 ...

  8. python dictionary怎么用_python Dictionary字典使用

    一.dictionary数据类型的结构是:{key1:value1, key2:value2, ...},即键值对.字典的健必须是不可更改的类型,如字符串.数字.元祖等:而值则可以是任意的数据类型,而 ...

  9. python嵌套字典取值_python嵌套字典比较值与取值的实现示例

    python嵌套字典比较值与取值的实现示例 本文通过示例给大家介绍了python嵌套字典比较值,取值,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例代码 #取值import t ...

  10. python实现字典树 时间复杂度_Python实现字典树

    字典树,又称单词查找树,Trie 树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串 ...

最新文章

  1. 使用球面目标自动标定雷达-相机外参
  2. 掌握好这23个Linux命令常用命令,让工作效率翻倍
  3. AAAI2020录用论文汇总(三)
  4. Gradle里Copy任务(task)的使用
  5. 仿个人税务 app html5_【注意】你下载的可能是个假的个税App
  6. 程序员的算法课(2)-排序算法
  7. 利用JAVA获取远程文件及使用断点续传 供学习者使用
  8. python不变的数据结构是_Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法...
  9. 爬虫-腾讯视频-弹幕评论
  10. day01:关于惯性导航工具箱的学习与使用:use of the progen
  11. Win7(64Bit) 安装 PL/SQL Developer图解
  12. vagrant 网络三种模式
  13. GNU __attribute__ 总结
  14. 数据分析中会常犯哪些错误,如何解决? 一
  15. 445.两数相加II(力扣leetcode) 博主可答疑该问题
  16. 那些年,我们一起用过的测试工具
  17. CSS-animation-梦幻西游小案例
  18. 超级详细的CentOS8.2搭建个人网站(WordPress)
  19. 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。
  20. Java项目:学生综合素质评价系统(java+SSM+thymeleaf+layui+Mysql)

热门文章

  1. burpsuite_pro的使用
  2. 在Java代码(非JSP及Action,Servlet,Controller)中获得WebRoot的物理路径
  3. Java单例模式实现(线程安全)
  4. 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现系统参数配置保存,附源码...
  5. android中openMax的实现
  6. LSB最低有效位算法实现
  7. obs之libx264编码
  8. tensorflow之train.get_checkpoint_state
  9. 阿里云服务器Ubuntu16.04安装Anaconda(python3.6)和本地远程连接jupyter
  10. 麒麟810怎么样_麒麟810+6G+128G+大电池,千元价格的手机上手体验