通过`__slots__` 节省RAM

标签(空格分隔): Python进阶


python中,由于创建每个实例都会有成员,这些成员都会被保存在dict中,但是Python不能静态分配RAM,当创建实例时,因此dict的大小会比所需要的内存大,特别是当实例数量有成千上万个时,造成RAM的浪费。

在此背景下,引入__slots__ 帮助节省RAM。
__slots__是一个在class内部写好的attributes的list。它告诉RAM分配内存时,只分配这些成员所需的空间。如果在实例创建时,如__init__中还有其他成员,那么也不会创建这个成员。

class MyClass(object):
    __slots__ = ['name', 'identifier']
    def __init__(self, name, identifier):
        self.name = name
        self.identifier = identifier
        self.set_up()
    # ...

如果我们改一下:

class MyClass(object):
    __slots__ = ['name', 'identifier']
    def __init__(self, name, identifier,pp):
        self.name = name
        self.identifier = identifier
        self.pp = pp
        
b2 = MyClass('k','s','b')        

则会报错:

AttributeError: 'MyClass' object has no attribute 'pp'
posted @ 2016-11-27 13:53  geek精神  阅读(329)  评论(0编辑  收藏  举报