Python 当使用插槽时,为什么默认情况下会删除插槽?

Python 当使用插槽时,为什么默认情况下会删除插槽?,python,weak-references,slots,Python,Weak References,Slots,我认为\uuuuu slots\uuuuu的主要目的是通过允许显式指定属性来节省内存使用量,而不是使用\uuuuuu dict\uuuuu允许对实例进行动态属性分配。因此,我不知何故理解了为什么在使用\uuuuuuuu插槽时默认删除\uuuuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但为什么它同时默认删除\uuuu weakref\uuu 参考资料:我不能读心术,但我怀疑其原理是这样的: 如果在使用\uuu

我认为
\uuuuu slots\uuuuu
的主要目的是通过允许显式指定属性来节省内存使用量,而不是使用
\uuuuuu dict\uuuuu
允许对实例进行动态属性分配。因此,我不知何故理解了为什么在使用
\uuuuuuuu插槽时默认删除
\uuuuuu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但为什么它同时默认删除
\uuuu weakref\uuu


参考资料:

我不能读心术,但我怀疑其原理是这样的:

  • 如果在使用
    \uuuuuukref\uuuuuuu
    时默认情况下未禁用
    \uuuuuuu插槽\uuuuuuuu
    ,则提供一种明确保存关联内存的方法将需要另一种特殊的选择退出机制
  • 更多的特殊情况会增加语言的复杂性,而这一个不会带来真正的好处
  • 考虑到很少使用弱引用,在默认情况下禁用它可能会被认为更简单,可以选择重新加入

    跳转到实现细节,从某种意义上说,未开槽的用户定义类在基本对象头的上方正好有两个“槽”(一个用于
    \uuuu dict\uuu
    ,一个用于
    \uuuukref\uuuu
    ),因此让
    \uu槽
    说“用这个显式列表替换默认值”当
    \uuuu插槽
    起作用时,可以很自然地删除
    \uuuu指令
    \uuuuuuuuukref\uuuuu