参考《Python源码剖析

Python源码剖析

在python代码可以用type()来返回一个obj的类型

In [1]: type(1)
Out[1]: int

1 这个obj的类是int, int类也是一个obj,叫做类型对象

In [4]: type(int)
Out[4]: type

In [20]: type(type)
Out[20]: type

同理type这个对象也是类型对象。

可以看到1的类是int,int的类是type,type这个类型对象的类是自己,说明对象类型溯源到最高是type

Untitled

这里有3个对象,每个对象都记录着自己的类型。type是个特殊的对象,它的类型是它自己,自己指向自己。

PyObject

这些对象先学习PyObject, Py中所有的对象都继承自这个结构体

106 typedef struct _object {
  107     _PyObject_HEAD_EXTRA
  108     Py_ssize_t ob_refcnt;
  109     struct _typeobject *ob_type;
  110 } PyObject;

里面有三个变量,ob_refcnt是引用计数变量(用于垃圾回收),ob_type这个指针指向本结构体类型

PyVarObject

PyObject下面是PyVarObject, 变长结构体

112 typedef struct {
  113     PyObject ob_base;
  114     Py_ssize_t ob_size; /* Number of items in variable part */
  115 } PyVarObject;

多了一个ob_size变量,存储元素个数。