购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅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的简单图形表示 xCksiUSZzX7MQ0IypmX7JZ1LkiYQ0VJrPAQj43siU3kMbtRbdNY+HL6rge/pSvqm

点击中间区域
呼出菜单
上一章
目录
下一章
×