Python的一些进阶学习-2017.10.17

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

   适用场景: 比如一个游戏,需要定义一个玩家类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封装到实例的定义里 以此来节约内存

你可能感兴趣的:(python)