上QQ阅读APP看书,第一时间看更新
0.3.4 定长对象和变长对象
除了0.3.2节提到的分类方法外,还可以根据是否包含可变长度数据将Python对象分为定长对象和变长对象这两种形式。定长对象指不包含可变长度数据的对象,如整数对象;变长对象指包含可变长度数据的对象,如字符串对象。
变长对象都拥有一个相同的PyVarObject对象,而PyVarObject是基于PyObject扩展的。
PyVarObject的相关源码(Include/object.h)如下:
// Include/object.h typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; struct _typeobject *ob_type; } PyObject; typedef struct { PyObject ob_base; Py_ssize_t ob_size; /* Number of items in variable part */ } PyVarObject;
从代码中可以看出,PyVarObject比PyObject多出了一个用于存储元素个数的变量ob_size。PyVarObject的简单图形表示如图0-4所示。
图0-4 PyVarObject的简单图形表示