类型对象和实例对象,实例对象由类型对象实例化得到,例如:
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即可。