如何创建大量的实例节省内存
适用场景: 比如一个游戏,需要定义一个玩家类player ,有多少玩家 就需要多少个player的实例,当在线人数达到一定人数,会产生大量的实例, 需减少大量实例带来的内存消耗
用定义类的slots 声明实例属性名字的列
直接上比较代码:
class Player(object):
def __init__(self,uid,name,status=0,level=1):
self.uid= uid
self.name= name
self.stat= status
self.level = level
class Player2(object):
__slots__={'uid','name','stat','level'}
def __init__(self,uid,name,status=0,level=1):
self.uid=uid
self.name= name
self.stat=status
self.level= level
直接上实例 :
p1=Player('0001','jim')
p2=Player2('0001','jim')
#dir函数 可以看一个模块有哪些属性和方法
set(dir(p1))-set(dir(p2))
{'__dict__', '__weakref__'}
发现 p1 比p2 多两个方法,其中dict 这个方法是多占内存的。可以通过sys.getsizeof(p1.dict)来查看占用多少字节
所以如果要创建大量实例,可以将slots封装到实例的定义里 以此来节约内存