万级实例数量下,使用`__slots__`减少内存使用量
用途
Python 为每个对象实例创建一个 __dict__
属性。这个字典用于存储实例的所有属性和方法。这种方式灵活但会消耗较多内存,因为每个实例都拥有一个独立的字典。
__slots__
是 Python 类中用于定义类实例的固定属性的特殊属性。
如果使用 __slots__
定义的属性,python 将使用一个固定大小的数组来存储属性,从而较少内存占用,提高属性访问速度。
用法
1class Example:
2 __slots__ = ("slot_0", "slot_1")
3
4 def __init__(self):
5 self.slot_0 = "zero"
6 self.slot_1 = "one"
7
8x1 = Example()
9print(x1.slot_0)
10print(x1.slot_1)
在这个例子中,__slots__
定义了两个固定的属性 slot_0
和 slot_1
。这意味着 Example
类的实例只能有这两个属性,不能动态添加其他属性。
使用场景
__slots__
是一个强大的优化工具,可以在需要大量对象实例时显著减少内存使用,并提高属性访问速度。
但是,它限制了对象的灵活性,因为你不能动态添加属性。在决定是否使用 __slots__
时,需要权衡这些优缺点。