对象

类型对象和实例对象,实例对象由类型对象实例化得到,例如:

a = int(3)
# int即为类型对象 实例化得到的a是实例对象

在python中,实例对象都是用c语言实现的在堆上申请的一块内存,一些内建的类型对象(int string)可以被静态初始化。

PyObject

PyObject是所有对象的基石,即PyObject * 可以指向任意对象,它主要包含两部分:

引用计数(ob_refcnt)
指向类型对象的指针(struct _typeobject *ob_type)

ob_refcnt实现了基于引用计数的垃圾收集机制
_typeobject指定一个类型对象的类型

其他对象

每个对象有不同的功能,除了起始部分和PyObject一样,还要存放他们各自不同的内容,如对于int对象有一个ob_ival的整数,存放该int对象的值,而对于可变长度对象如string list会有ob_size说明该对象包含的元素数量。

思考

这里的实现,完全可以把元素个数之类放在_typeobject对应的类型中实现,没必要放在对象里,全部使用PyObject即可。

你可能感兴趣的:(对象)