Python源码剖析----第一章

第一章

1.1 Python的内建对象
在python中,对象就是为C中的结构体在堆上申请的一块内存,一般不能被静态初始化
但是,类型对象是唯一的例外,python中所有的内建的类型对象都是被静态初始化的。
Python中的内建对象的头结构都是对Pyobject结构的扩展,PyObject是整个Python对象机制的核心。
[object.h]
typedef struct _object{
 int ob_refcnt;#引用计数,用于垃圾收集机制的内存管理
 struct _typeobject *ob_type;#结构体指针,只想对象类型的类型对象
}PyObject;

因此,对于任一个Python内建对象都拥有相同的对象头部,这就使得在Python中,对对象的引用变得非常统一,我们只需要一个PyObject *指针就可以引用任意的一个对象。


对于每一个对象,除了必须有这个PyObject内容外,还需要一些额外的内存用来存放每个对象各自的信息。
如Python中的整数对象:
[intobject.h]
typedef struct{
 PyObject_HEAD #对象头结构
 long ob_ival; #整数对象的值
} PyIntObject;

1.2 类型对象
每个对象的元信息如占用内存大小都与对象所属类型密切相关,这些信息都由对象所对应的类型对象(_typeobject)来维护。在_typeobject中的定义中包含了许多信息,主要可以分为四类:
1. 类型名,tp_name, 主要用于Python内部以及调试使用;
2. 创建该类型对象时分配内存空间大小的信息,tp_basicsize, tp_itemsize;
3. 与该类型的对象相关联的操作信息,如tp_print等的函数指针;
4. ()

类型对象的类型是PyType_Type, 所有用户自定义class所对应的PyTypeObject对象都是通过这个对象来创建的。以一个整数对象的运行为例。

通过PyObject和PyTypeObject,Python利用C语言完成了C++所提供对象的多态性。Python创建一个对象会先分配内存,在Python内部会通过泛型指针PyObject *实现各个函数之间的传递,从而实现Python的多态性。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值