Python3 Note __slots__
slots
__slots__是 python 对象的一个特殊属性。
示例
复制代码
结果如下:
复制代码
通过观察发现: foo 对象的属性比 foo_slot 多了一个__dict__和__weakref__,少了一个__slots__ foo.__dict__的值为{'a': 1},foo_slot.__slots__的值为('a',)
__slots__的两大好处
节省内存占用 Python 内置的__dict__本质是一个哈希表,是一种用空间换时间的数据结构。为了解决冲突的问题,当字典使用量超过 2/3 时,Python 会根据情况进行 2-4 倍的扩容。由此可预见,取消__dict__的使用可以大幅减少实例的空间消耗。
复制代码
加快访问速度默认情况下,访问 Python 对象的属性,需要 1)访问对象 foo.a 2)foo.dict 即(get & set) 3)foo.dict['a'] 4)结果。当使用了__slots__以后,直接访问 1) foo_slots.a 2) member_descriptor 即(get & set) 3)结果
复制代码
评论