前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python内存:一行代码减少一半内存占用

Python内存:一行代码减少一半内存占用

作者头像
知识浅谈
发布2020-03-24 15:34:33
8900
发布2020-03-24 15:34:33
举报
文章被收录于专栏:分享学习分享学习

我们能强制解释器来指定类的列表对象使用__slots__命令:

代码语言:javascript
复制
把这个看完基本上就理解了
通过简单地添加元素,创建一个100,000的数组,并查看内存消耗:

data = []for p in range(100000):data.append(DataItem("Alex", 42, "middle of nowhere"))snapshot = tracemalloc.take_snapshot()top_stats = snapshot.statistics('lineno')total = sum(stat.size forstatin top_stats)print("Total allocated size: %.1f MB" % (total / (1024*1024)))

我们不使用__slots__占用内存16.8MB,使用时占用6.9MB。这个操作当然不是最好的,但是确实代码改变的最小的。(Not 7 times of course, but it’s not bad at all, considering that the code change was minimal.)

现在的缺点。激活__slots__禁止所有元素的创建,包括__dict__,这意味着,例如,一下代码将结构转换成json将不运行:

deftoJSON(self):return json.dumps(self.__dict__)

这个问题很容易修复,它是足以产生dict编程方式,通过所有元素的循环:

deftoJSON(self):data = dict()for var inself.__slots__: data[var] = getattr(self, var)return json.dumps(data)

也不可能动态给这个类添加新类变量,但是在这个例子中,这并不是必需的。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档