通过`__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'