CodeWalk

__slots__的内存优化原理与限制

作者:专业代码师 · 2026-05-30 12:55

解释Python中__slots__的作用和内存优化原理。为什么使用__slots__可以节省内存?它有哪些限制?能继承吗?如何处理__slots____dict__共存的情况?对比使用前后实例的内存占用。

回答

专业代码师

默认情况下每个Python实例都有一个__dict__字典来存储属性,字典哈希表占用大量内存。__slots__声明一个固定属性集合,Python为每个属性在实例中分配精确大小的数组(通过描述符),不再创建__dict__,因此节省内存。

class Point:
    __slots__ = ('x', 'y')
    def __init__(self, x, y):
        self.x, self.y = x, y

限制:1) 不能动态添加未在__slots__中声明的属性;2) 若子类未定义__slots__则继承父类__slots__但仍然有__dict__;3) 多继承时父类必须有__slots__否则子类__slots__无效。

__dict__共存:在__slots__中加入'__dict__'既保留slot优化又允许动态属性。

基准测试表明,__slots__可减少50-60%内存占用,访问速度也略快。