python如何为创建大量实例节省内存

 更新时间:2018年03月20日 17:07:27   作者:北门吹雪  
这篇文章主要为大家详细介绍了python如何为创建大量实例节省内存,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

python如何为创建大量实例节省内存,具体内容如下

案例:

  某网络游戏中,定义了玩家类Player(id, name, status,....),每有一个在线玩家,在服务器程序内有一个Player的实例,当在线人数很多时,将产生大量实例(百万级别)

  需求:

         如何降低这些大量实例的内存开销?

如何做?

       首先要明白,python中的类可以动态的添加属性,实则在内存中有个__dict__方法维护了这种动态添加属性,它占有内存,把它关掉,不就达到省内存要求了?

#!/usr/bin/python3
 
import time
import sys
 
 
class Player(object):
  def __init__(self, id, name, status):
    self.id = id
    self.name = name
    self.status = status
 
if __name__ == '__main__':
  player_1 = Player(1, 'bei_bei', '上线')
  print(player_1.__dict__)
   
  print('_' * 100)
  # 动态装配属性
  player_1.money = 10000
  player_1.__dict__['time'] = time.time()
  print(player_1.__dict__)
  print(player_1.money, player_1.time)
   
  print('_' * 100)
  # 打印__dict__占用的内存空间
  print('dict方法占用内存:', sys.getsizeof(player_1.__dict__))
   
  print('_'*100)
  # 动态删除属性
  print(player_1.__dict__)
  del player_1.__dict__['time']
   
  del player_1.money
  print(player_1.__dict__) 

通过__slots__属性,声明实例属性名字的列表

#!/usr/bin/python3
 
 
class Player(object):
  # 通过slots方法指定类的定长属性
  __slots__ = ['id', 'name', 'status']
   
  def __init__(self, id, name, status):
    self.id = id
    self.name = name
    self.status = status
 
 
if __name__ == '__main__':
  player_1 = Player(1, 'bei_bei', '上线')
  print(player_1.id, player_1.name, player_1.status)
   
  # 尝试输出__dict__属性,发现没有,就无法动态的装配类属性,达到省内存的目的
  try:
    print(player_1.__dict__)
  except Exception as e:
    print(e)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于python cut和qcut的用法及区别详解

    基于python cut和qcut的用法及区别详解

    今天小编就为大家分享一篇基于python cut和qcut的用法及区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Django中的session用法详解

    Django中的session用法详解

    这篇文章主要介绍了Django中的session用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python读csv文件去掉一列后再写入新的文件实例

    Python读csv文件去掉一列后再写入新的文件实例

    下面小编就为大家分享一篇Python读csv文件去掉一列后再写入新的文件实例,具有很的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python实现把utf-8格式的文件转换成gbk格式的文件

    Python实现把utf-8格式的文件转换成gbk格式的文件

    这篇文章主要介绍了Python实现把utf-8格式的文件转换成gbk格式的文件,本文给出了实现代码并同时剖析了代码的作用,需要的朋友可以参考下
    2015-01-01
  • 手把手教你实现Python连接数据库并快速取数的工具

    手把手教你实现Python连接数据库并快速取数的工具

    在数据生产应用部门,取数分析是一个很常见的需求,实际上业务人员需求时刻变化,最高效的方式是让业务部门自己来取。本文就来手把手教大家搭建一个 Python 连接数据库,快速取数工具,需要的可以参考一下
    2022-11-11
  • Pytorch1.5.1版本安装的方法步骤

    Pytorch1.5.1版本安装的方法步骤

    这篇文章主要介绍了Pytorch1.5.1版本安装的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 何用Python实现一个 “系统声音” 的实时律动挂件

    何用Python实现一个 “系统声音” 的实时律动挂件

    这篇文章将给大家介绍了如何用 Python 实现一个 “系统声音” 的实时律动挂件,采集后直接实时地在电脑上绘制波形动画,主要是用来作为 FL Studio 播放时的一个桌面小挂件,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • python字符串拼接+和join的区别详解

    python字符串拼接+和join的区别详解

    这篇文章主要给大家介绍了关于python字符串拼接+和join的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • pytorch 简介及常用工具包展示

    pytorch 简介及常用工具包展示

    Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程,这篇文章主要介绍了pytorch 简介及常用工具包展示,需要的朋友可以参考下
    2023-02-02
  • Python图像处理库处理步骤

    Python图像处理库处理步骤

    这篇文章主要介绍了Python图像处理探索之Python图像处理库,我们将学习使用不同的 Python 库实现一些常见的图像处理、变换和可视化技术,这些技术通常可以用作更复杂的图像处理任务的基本预处理/后处理步骤,需要的朋友可以参考下
    2023-04-04

最新评论