python减小内存占用_如何将Python内存占用缩小20倍?

当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下。

下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量。

注: 这是我原帖子的英文版本(原帖子是用俄文写的)。(https://habr.com/ru/post/455722/ )

为了简单起见,我们将考虑用Python中的结构来表示坐标为x、y、z的点,并通过名称来访问坐标值。

Dict

在小程序中,特别是在脚本中,使用内置的dict来表示结构信息是非常简单方便的:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-1.jpg (6.06 KB, 下载次数: 0)

2020-11-8 08:06 上传

随着Python 3.6中使用一组有序键的更紧凑实现方式的出现,dict变得更有吸引力。但是,让我们看看它在RAM中的内存大小:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-2.jpg (4.43 KB, 下载次数: 0)

2020-11-8 08:06 上传

它需要大量内存,特别是当你突然需要创建大量实例时:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-3.jpg (17.2 KB, 下载次数: 0)

2020-11-8 08:06 上传

类实例

对于那些喜欢将所有东西放置在类中的人来说,最好将结构定义为一个可以通过属性名访问的类,:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-4.jpg (10.78 KB, 下载次数: 1)

2020-11-8 08:06 上传

类实例的结构很有趣:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-5.jpg (18.95 KB, 下载次数: 0)

2020-11-8 08:06 上传

这里的__weakref__是对这个对象的所谓弱引用列表的一个引用,__dict__字段是对类实例字典的引用,它包含实例属性的值(注意64位的引用平台会占用8个字节)。从Python 3.3开始,共享空间用于在字典中存储类的所有实例的键。这减少了RAM中实例堆栈的大小:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-6.jpg (6.8 KB, 下载次数: 0)

2020-11-8 08:06 上传

因此,大量的类实例占用的内存比一个普通字典(dict)占用的要小:

a3318c941136e31422f9e0be7c9e8802.gif

如何将Python内存占用缩小20倍?-7.jpg (16.23 KB, 下载次数: 0)

2020-11-8 08:06 上传

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值