为什么在使用插槽时会默认删除weakref?

2024-05-13 14:28:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为__slots__的主要目的是通过允许显式指定属性来节省内存使用,而不是使用__dict__来允许实例上的动态属性分配。所以我理解了为什么在使用__slots____dict__被默认删除。但是为什么它同时默认删除__weakref__?你知道吗

引用:https://docs.python.org/3/reference/datamodel.html#slots


Tags: 实例内存httpsorg目的docs属性html
1条回答
网友
1楼 · 发布于 2024-05-13 14:28:13

我看不懂头脑,但我怀疑原理是这样的:

  1. 如果使用__weakref__时默认情况下没有禁用__slots__,那么提供一种显式保存关联内存的方法将需要另一种特殊的opt-out机制
  2. 更多的特殊情况增加了语言的复杂性,而这种情况并不能带来真正的好处

考虑到很少使用弱引用,在默认情况下禁用它可能被认为更简单,可以选择重新加入。你知道吗

跳转到实现细节,从某种意义上说,未开槽的用户定义类在基本对象头上方正好有两个“槽”(一个用于__dict__,一个用于__weakref__),因此__slots__说“用这个显式列表替换默认值”使得__dict____weakref____slots__起作用时,很自然地同时删除__dict____weakref__。你知道吗

相关问题 更多 >