为什么Python要对引用非容器类型的类型实现循环GC

问题描述 投票:0回答:1

检查文档: 支持循环垃圾收集

Python 对检测和收集涉及循环引用的垃圾的支持需要对象类型的支持,这些对象类型是其他对象的“容器”,而其他对象也可能是容器。不存储对其他对象的引用或仅存储对原子类型(例如数字或字符串)的引用的类型不需要为垃圾收集提供任何显式支持。

但是我正在研究

bytearray
的实现,虽然
bytearray
本身不使用循环 GC,但它创建的 iterator 却使用了循环 GC。 我的问题是,根据文档,它不需要它,因为
bytearray
迭代器不引用任何可能是创建它的
bytearray
本身的容器的对象,因此没有循环依赖的机会。 这背后的原因是什么?

python garbage-collection circular-dependency python-c-api
1个回答
0
投票

bytearray
实现了Buffer Protocol,它允许导出包含循环引用的缓冲区结构
Py_buffer
回到导出obj
,因此它的迭代器需要支持循环垃圾收集根据您引用的文档。

© www.soinside.com 2019 - 2024. All rights reserved.