一:PyObject
首先,先来看PyObject在object.h中的定义。
typedef struct _object {
_PyObject_HEAD_EXTRA
Py_ssize_t ob_refcnt;
struct _typeobject *ob_type;
} PyObject;
#ifdef Py_TRACE_REFS
/* Define pointers to support a doubly-linked list of all live heap objects. */
#define _PyObject_HEAD_EXTRA \
struct _object *_ob_next; \
struct _object *_ob_prev;
#define _PyObject_EXTRA_INIT 0, 0,
#else
#define _PyObject_HEAD_EXTRA
#define _PyObject_EXTRA_INIT
#endif
typedef struct _typeobject PyTypeObject;
PyObject对象是一个结构体,是python所有对象的基础。可以看见结构体中包含三个部分:_PyObject_HEAD_EXTRA、
Py_ssize_t ob_refcnt、 struct _typeobject *ob_type。
1、_PyObject_HEAD_EXTRA是一个宏,它的定义与Py_TRACE_REFS有关,即当编译时会执行else语句,导致_PyObject_HEAD_EXTRA定义为空;
2、Py_ss