typedef PY_UINT32_T digit;
#define PyObject_VAR_HEAD \
PyObject_HEAD \
Py_ssize_t ob_size;
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1];
};
typedef struct _longobject PyLongObject;
PyLongObject对象除了引用计数ob_refcnt,*ob_type指针,与PyIntObject不同的是,通过动态改变ob_digit数组的大小,以实现任意精度的长整形。 PyLongObject对象的绝对值表示为
SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i)
当数值为0L时,ob_size = 0,不会为ob_digit数组分配内存。 当数值为负数时,ob_size < 0; 当创建一个PyLongObject时,内存分配函数会为ob_digit数组分配足够的空间,所以ob_digit[0] … ob_digit[abs(ob_size)-1]是有效的。 为结构体的成员数组动态分配大小