python类与对象-如何为创建大量实例节省内存
如何为创建大量实例节省内存
问题举例
在网络游戏中,定义玩家类Player(id, name, level...),
每个玩家在线将创建一个Player实例,当在线人数很多时,将产生大量实例,
如何降低这些实例的内存开销?
分析
通过类创建的对象一般有一个__dict__属性,它是一个字典,
在添加属性时创建,主要用来维护动态添加的属性,__dict__非常消耗内存
解决思路
定义类的__slots__属性,声明实例有哪些属性,提前分配内存空间,但是同时也关闭了动态添加属性的功能
代码
通过tracemalloc模块查看两个类创建100000实例所占用内存的对比
import tracemalloc
class Player1():
__slots__ = ['uid', 'name', 'level']
def __init__(self, uid, name, level):
self.uid = uid
self.name = name
self.level = level class Player2():
def __init__(self, uid, name, level):
self.uid = uid
self.name = name
self.level = level tracemalloc.start()
# start
#la = [Player1(1,'tom',3) for _ in range(100000)]
#D:\python\test.py:0: size=7056 KiB, count=100002, average=72 B
#C:\Python\Python37\lib\tracemalloc.py:0: size=64 B, count=1, average=64 B
#[Finished in 0.9s] lb = [Player2(1,'tom',3) for _ in range(100000)]
#D:\python\test.py:0: size=16.8 MiB, count=299994, average=59 B
#C:\Python\Python37\lib\tracemalloc.py:0: size=64 B, count=1, average=64 B
#[Finished in 1.7s]
# end
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('filename')
for stat in top_stats[:10]: print(stat)
参考资料:python3实用编程技巧进阶
python类与对象-如何为创建大量实例节省内存的更多相关文章
- python_如何为创建大量实例节省内存?
案例: 某网络游戏中,定义了玩家类Player(id, name, status,....),每有一个在线玩家,在服务器程序内有一个Player的实例,当在线人数很多时,将产生大量实例(百万级别) 需 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类、对象
python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- python 类、对象、方法、属性
在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...
- python类、对象、方法、属性之类与对象笔记
python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗, ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
随机推荐
- bootstrap selectpicker控件select下拉框动态数据无法回显的问题
有关于selectpicker下拉框数据回显的问题,当查看一个对象的属性的时候, 发现有关于selectpicker的下拉框并没有将返回的数据进行回显,显示的都是请选择, 经查证,当查看属性的时候,他 ...
- CSS3标准盒模型还是IE怪异模型box-sizing属性的应用设置
在一个文档中,每个元素都被表示为一个矩形的盒子.盒子模型具有4个属性['外边距(margin)','边框(border)','内边距(padding)','内容(content)']. 我们要设置某个 ...
- matplotlib散点数据-【老鱼学matplotlib】
之前我们一直在讲述线段图,这次讲述散点图. 散点图的生成很简单,只要调用plt.scatter()函数就可以. 例如: import numpy as np import pandas as pd i ...
- 设置通过Maven创建工程的JDK版本
在eclipse中创建的Maven工程默认的运行环境为JDK1.5,如果想修改JDK的版本,无非是右键项目点击Build Path->Configure Build Path修改JDK信息-&g ...
- python之psutil模块(获取系统性能数据)
psutil模块 1.介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
- Linux——目录和文件
目录和文件
- 有关svn的报错
由于目标计算机积极拒绝,无法连接.当报出这样的错的时候就是跨域的问题
- JAVA使用POI如何导出百万级别数据(转)
https://blog.csdn.net/happyljw/article/details/52809244 用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会 ...
- HTML5_canvas_像素操作_图片马赛克_图片反相
canvas 像素操作 像素,即像素点,一个像素只有一个颜色 100*100 的 px 的屏幕区域有 100*100*4 个像素点,即 width*height*4 rgba(0, 0, 0, 1); ...
- macos解决Hadoop之Unable to load native-hadoop library
很显然,native-hadoop library不支持macos,如果是Linux就不会有这个问题.在百度上搜了,要下载在macos上编译的native hadoop library,我在网上下载了 ...