python 百万级别类实例实现节省内存

# 案例:
'''
某网络游戏中,定义了玩家类Player(id,name,status)
每当有一个玩家,就会在服务器创建一个Player实例
当在线人数过多时,将产生大量实例(百万级别),消耗内存

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

解决方案:定义类的 __slots__属性,它是用来声明实例属性名字的列表
'''


class Player(object):
    __slots__ = ['name', 'id', 'status']

    def __init__(self, name, id, status):
        self.name = name
        self.id = id
        self.status = status

    def test(self):
        print(self.name)
        print(self.id)
        print(self.status)


class Player1(object):
    def __init__(self, name, id, status):
        self.name = name
        self.id = id
        self.status = status


p = Player("Li", '111', '10')
p.test()
p1 = Player1("Li", '111', '10')
print(dir(p1))
print(dir(p))
print(set(dir(p1)) - set(dir(p)))  # 求两个实例的差集   p1比p多了  {'__weakref__', '__dict__'}      其__dict__占用大量内存
import sys

print(sys.getsizeof(p1.__dict__))  # 打印出p1.__dict__占用内存大小
"""
实例p1可以动态生成属性,而p则不行,实现阻止动态绑定
"""
p1.x = 1
p1.__dict__['y'] = 2
print(p1.__dict__)
# p.x = 1
# p.__dict__['y'] = 2

 

posted @ 2019-06-03 00:58  jum_blog  阅读(725)  评论(0编辑  收藏  举报

载入天数...载入时分秒...