python源码剖析笔记(一)
2017-04-28 14:21
148 查看
python源码剖析笔记(一)
python对象初探
对于计算机而言对象就是一片被分配的内存空间,可能是连续的也可能是离散的python中的对象是为C中的结构体在堆上申请的一块内存,一般情况,对象不能被静态初始化,而且也不能在栈空间上生存,python中所有的内建类型对象(如整数类型对象,字符串类型对象)都是被静态初始化的。
python中对象被创建后它在内存中的大小就不能改变,对于可变长度对象,需要在对象内部维护一个指向一块可变大小的内存区域的指针
定长对象:PyObject,变长对象:PyVarObject,从下面的代码可以看出变长对象头部多了一个ob_size,这个ob_size不是字节数,而是包含PyObject的个数
#define PyObject_HEAD \ _PyObject_HEAD_EXTRA \ Py_ssize_t ob_refcnt; \ struct _typeobject *ob_type; #define PyObject_VAR_HEAD \ PyObject_HEAD \ Py_ssize_t ob_size; /* Number of items in variable part */
对象所有相关的元信息都存储在类型对象PyTypeObject中,主要包含一下四类元信息
类型名:tp_name
创建该类型对象时分配内存空间大小的信息:tp_basicsize, tp_itemsize
与该类型相关联的操作信息如:tp_print等
类型信息如tp_bases,tp_dict等
创建对象
Python C API
Py**_Type->tp_new
PyObject中的ob_refcnt代表该对象的引用,是一个32位的整形变量,类型对象是不遵守引用技术规则的,永远不会被析构。
python对象可分为以下五类
Fundamental对象(类型对象,type)
Numeric对象(数值对象,integer,float,boolean)
Sequence对象(容纳其他对象的序列集合对象,string,list,tuple)
Mapping对象(映射对象,dict)
Internal对象(python虚拟机运行时使用的内部对象,function,code,frame,module,method)
相关文章推荐
- python的加密模块 hashlib
- Anconda,Python科学计算环境
- Windows 下 anaconda 安装第三方包
- python单元测试
- Python下opencv使用笔记(七)(图像梯度与边缘检測)
- 【深度学习】python用RNN中LSTM进行正弦函数拟合
- 打开指定文件夹并批量修改文件名(python)
- python创建命令行地址簿程序
- 关于Python的进程线程协程之threading模块(一)Thread类
- 常见python错误(4,5,13,14,15,17点不错)
- Python扫描指定文件夹下(包含子文件夹)的文件
- python概要和基础
- Django从零开始搭建一个相册网站--5.Python操作数据库
- Python、PyCharm安装及使用方法(Mac版)详解
- 第三章 使用字符串
- (转)python request用法
- 【python】理解循环:for,while
- Python列表、元组、集合、字典的区别和相互转换
- Python_mkdir -p
- windows下python配置caffe接口