令人惊讶的是,没有关于__weakref__
的显式文档。弱引用的解释是here。在__slots__
的文档中也简短地提到了__weakref__
。但是我找不到任何关于__weakref__
本身的东西。
__weakref__
到底是什么?-它只是一个充当标志的成员:如果存在,对象可能被弱引用?-或者它是一个函数/变量,可以被重写/赋值以获得所需的行为?多么?
发布于 2016-04-22 17:18:11
__weakref__
只是一个不透明的对象,它引用了当前对象的所有弱引用。实际上,它是weakref
(或者有时是weakproxy
)的一个实例,它既是对对象的弱引用,也是对该对象的所有弱引用的双向链表的一部分。
它只是一个实现细节,允许垃圾收集器通知弱引用它的referent已经被收集,并且不再允许访问它的底层指针。
弱引用不能依赖于检查它引用的对象的引用计数。这是因为该内存可能已被回收,现在正由另一个对象使用。最好的情况是VM会崩溃,最坏的情况是弱引用将允许访问它最初没有引用的对象。这就是为什么垃圾收集器必须通知弱引用其引用不再有效的原因。
结构见weakrefobject.h,此对象见C-API。实现细节是here
https://stackoverflow.com/questions/36787603
复制相似问题