(资料图片仅供参考)
PyObject 实际上是_object结构体:
_object 包含一个 ob_refcnt (垃圾回收的引用计数器)和 ob_type:
我们看看 _PyObject_HEAD_EXTRA 是怎么定义的,如果 Py_TRACE_REFS 定义的话, 我们会发现是一个链表, 可是正常情况下这个宏是不定义的:
我们来看看PyVarObject是怎么定义的:
它包含了 ob_base(父类) 和 ob_size, 看来在Python的世界观中一切皆为PyObject.
每当我们实例化任意一个Python对象,在其占用的堆内存区块的首个字节就包含一个PyObject定义的副本, 这也许是c语言实现面向对象的继承的方法吧!
可以说所有Python的对象都是PyObject定义出来的, 后面再对各个对象慢慢研究吧。。。