python2 字符串转字典之后 内存的变化让我吓一跳!!!

2018-07-24 18:07:37 +08:00
 skiphuang

项目里遇到这么一行代码如下:

dict_data = eval(str_data)

str_data 大小在 3MB 左右,用 memory_profiler 检测到在这一行内存却增加了 50MB 左右,为何?

有没有大佬给个提示

3137 次点击
所在节点    Python
6 条回复
BBCCBB
2018-07-24 18:20:02 +08:00
string -> dict, 这还需要解释么?
aice114
2018-07-24 18:25:19 +08:00
用空间换时间嘛
wwqgtxx
2018-07-24 18:26:39 +08:00
有什么好奇怪的,数据结构不占用空间的么
kunluanbudang
2018-07-24 18:49:39 +08:00
如果了解 dict 的底层实现,几乎可以手动计算出来
jameslan
2018-07-25 07:11:52 +08:00
@kunluanbudang 单层大 dict 和多层小 dict,内存占用差别还是很大的
skiphuang
2018-07-25 08:34:18 +08:00
@BBCCBB @aice114 @wwqgtxx @kunluanbudang @jameslan
之前就知道字典需要额外的空间用于 hash,空间换时间,没太当回事,一看数据确实被惊到了
而且确实这也是一个多层大字典

现在项目里面因为这个问题,导致内存吃的很严重
正在努力找优化的切入点

背景:
做转换的原因是需要处理`str_data`数据,用于生产 protocol buffers
大佬们,有想法可以指点一二吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/473766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX