【发布时间】:2019-06-13 07:16:41
【问题描述】:
我认为__slots__ 的主要目的是通过允许显式指定属性来节省内存使用量,而不是使用__dict__ 允许对实例进行动态属性分配。所以我以某种方式理解为什么在使用__slots__ 时会默认删除__dict__。但是为什么它同时默认删除__weakref__呢?
【问题讨论】:
标签: python weak-references slots
我认为__slots__ 的主要目的是通过允许显式指定属性来节省内存使用量,而不是使用__dict__ 允许对实例进行动态属性分配。所以我以某种方式理解为什么在使用__slots__ 时会默认删除__dict__。但是为什么它同时默认删除__weakref__呢?
【问题讨论】:
标签: python weak-references slots
我无法读心,但我怀疑基本原理是这样的:
__slots__ 时未默认禁用 __weakref__,则提供一种显式保存关联内存的方法将需要另一种特殊的退出机制考虑到很少使用弱引用,默认禁用它可能被认为更简单更简单,并且可以选择重新启用。
深入了解实现细节,从某种意义上说,无槽的用户定义类在基本对象标头之上和之上恰好有两个“槽”(一个用于__dict__,一个用于__weakref__),因此有__slots__ 说当__slots__ 起作用时,“用这个显式列表替换默认值”可以很自然地删除__dict__ 和__weakref__。
【讨论】: