0、先看一个例子:
>>> import sys
>>> a=1234
>>> sys.getrefcount(a)
2
>>>
相信很多人在学习python到这里的时候都会有疑问,为啥我刚刚创建的对象a,起始的引用计数就是2呢?为啥不是1呢?
这个问题也困扰了我很久,自己在学习python的源代码才找到了答案,下面是分析过程,供大家参考。
1、引用计数是啥?
python的内存回收机制使用了引用计数的机制,所以每个PyObject中都有一个ob_refcnt来计数当前对象被引用的次数,来看定义。
Include\object.h
typedef struct _object {
PyObject_HEAD
} PyObject;
/* PyObject_HEAD defines the initial segment of every PyObject. */
#define PyObject_HEAD \
_PyObject_HEAD_EXTRA \
Py_ssize_t ob_refcnt; \ #没错,就是它了
struct _typeobject *ob_type;
Python\sysmodule.c
static PyObject *
sys_getrefco