这个想法来自这个参考。
由于扩展模块的工作方式,Python永远无法完全确定根集。
据我了解,Python解释器的运行方式与JVM类似,但可能更抽象。因此,当前存在执行帧,为什么不能在那里确定root?就C扩展模块而言,为什么不将其保留,让它自己管理内存呢?
另一个有趣的一点是
首先,我们观察到参考循环只能由容器对象创建。
我不能创建两个自定义类并使它们相互引用吗?我对此进行了一些思考,似乎并不是直接构造一个,但是如何证明我们不能通过某些预制构造来构造此场景?
扩展模块PyObject *
始终处理原始对象指针(),其中一些模块将此类指针存储在最奇怪的位置(static
变量,自定义非Python数据结构,作为其他某些库的事件系统的回调的有效载荷数据等),因此,它不仅仅是需要检查的当前堆栈帧的本地对象。正如您提到的页面所述,甚至扫描堆栈都需要特定于平台的组装魔术。
可以设计一个扩展API来显式地传达所有此类指针,但是对于二十年前问世的CPython,如果可以从头开始的话(这对于很多人认为是次要的好处是一个很大的麻烦) 。
我不能创建两个自定义类并使它们相互引用吗?
继续阅读。在这里,“容器”的使用范围更广:
这些是可以保存对其他对象的引用的对象。在Python列表中,字典,实例,类和元组都是容器对象的示例。整数和字符串不是容器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句