python如何为创建大量实例节省内存
作者:北门吹雪 发布时间:2023-03-19 06:35:37
标签: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)
来源:http://www.cnblogs.com/2bjiujiu/p/7286704.html
0
投稿
猜你喜欢
- 问题描述: 买了mac电脑,第一次装mysql,不知道初始密码,如何修改初始密码记录下。解决方式:htt
- rs.open sql,conn:如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.c
- MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、
- 使用一阶线性方程预测波士顿房价载入的数据是随sklearn一起发布的,来自boston 1993年之前收集的506个房屋的数据和价格。loa
- 类、构造函数、原型先来说明一点:在上面的内容中提到,每一个函数都包含了一个prototype属性,这个属性指向了一个prototype对象(
- Pygame的Font文本和字体Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的。该模块的常用方法如下
- 需求:需要在pycharm中跑一个深度学习的项目但是tensorflow包导不入问题分析:当前使用的是anaconda的3.8版本,无法正常
- 1、什么是偏函数partialpython中提供一种对于函数固定属性的函数 2、偏函数的作用把一个函数的某些参数给固定住(也就是设
- 概述在进行网站爬取数据的时候,会发现很多网站都进行了反爬虫的处理,如JS加密,Ajax加密,反Debug等方法,通过请求获取数据和页面展示的
- 相同点: a. 两者都需要直接抓取到网页源码才能有效工作, b. 两者单位时间内会多次大量抓取被访问的网站内容; c. 宏观上来讲两者IP都
- 平时我们在使用MySQL数据库的时候经常会因为操作失误造成数据丢失,MySQL数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库
- 线性回归是一种常见的机器学习算法,也是人工智能中常用的算法。它是一种用于预测数值型输出变量与一个或多个自变量之间线性关系的方法。例如,你可以
- 本文实例为大家分享了python批量转换图片为黑白的具体代码,供大家参考,具体内容如下用到的库:OpenCV、osimport cv2imp
- 1.Jinja21.简介Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系
- threading.Timer一次timer只生效一次,不会反复循环,如果实现循环触发,代码如下:import timeimport thr
- 本文实例讲述了php基于curl实现随机ip地址抓取内容的方法。分享给大家供大家参考,具体如下:使用php curl 我们可以模仿用户行为,
- 一组有序项目的集合可变的数据类型【可进行增删改查】列表中可以包含任何数据类型,也可包含另一个列表【可任意组合嵌套】列表是以方括号“[]”包围
- 在官网下载python和pycharm的安装包python: https://www.python.org/downloads/window
- 准备工作创建表use [test1]gocreate table [dbo].[student]( [id] [int] ide
- 我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配。MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REG