(Python学习4)List对象
来源:互联网 发布:魔镜数据准确吗 编辑:程序博客网 时间:2024/06/09 18:07
1、PyListObject对象
创建时,可指定大小,据此开辟元素列表所需内存。
Python中list的内存增长模型如下:
0, 4, 8, 16, 25, 35, 46, 58, 72, 88
实现方式为:
typedef struct { PyObject_VAR_HEAD PyObject **ob_item; Py_ssize_t allocated;} PyListObject;
PyObject_VAR_HEAD中的obsize表示该list对象含有的元素个数,而allocated表示该list对象占用的内存空间。ob_item实际指向一个指针数组,该数组中的每个指针指向真正的PyObject。
创建时,可指定大小,据此开辟元素列表所需内存。
op->ob_item = (PyObject **) PyMem_MALLOC(nbytes);memset(op->ob_item, 0, nbytes);新建list对象后,可插入、添加、删除元素。若allocated不足,可自动申请内存空间。
Python中list的内存增长模型如下:
0, 4, 8, 16, 25, 35, 46, 58, 72, 88
实现方式为:
new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);删除list对象时
i = Py_SIZE(op);while (--i >= 0) { // 逐一减小对真实PyObject对象的引用Py_XDECREF(op->ob_item[i]);}PyMem_FREE(op->ob_item); // 然后释放元素指针列表
而该List对象是否销毁,如下。
3、PyListObject对象缓冲池
#define PyList_MAXFREELIST 80static PyListObject *free_list[PyList_MAXFREELIST];free_list是指针数组,指针指向list对象。
创建List对象时:
if (numfree) { // 如果free_list有空闲,直接指向numfree--;op = free_list[numfree];_Py_NewReference((PyObject *)op);} else { // 否则新开辟内存空间op = PyObject_GC_New(PyListObject, &PyList_Type);}
删除List对象时:
if (numfree < PyList_MAXFREELIST) // 如果有空余空间,将list对象放入free_Listfree_list[numfree++] = op;else // 否则直接销毁Py_TYPE(op)->tp_free((PyObject *)op);
- (Python学习4)List对象
- python学习--对象类型(num,string,list,dict,tuple,file)
- Python学习笔记(一):LIST数据类型
- python 系统学习笔记(四)--list
- python 系统学习笔记(四)--list
- Python 学习笔记之列表(List)
- Python学习之列表List()
- python学习笔记--list
- python学习-列表(list)
- python----学习之list
- Python学习-使用list
- Python-List&Tuple学习
- Python学习:list(数组)
- python学习之--list
- python学习之list
- ToDo-List-><学习Python>
- python list 学习
- python学习笔记--List
- dedecms 中 统计访问量
- 二叉查找树实现
- iso-8859-1,charset=utf-8,charset=gb2312的区别
- 求1到n这n个整数的十进制表示中1出现的次数
- 40w会议投票系统优化方案
- (Python学习4)List对象
- DOS是Diskette Operating system简介
- ExtJS 2使用经验(树、表格树、RadioGroup)
- linux内核之文件系统
- pig0.9.2安装与配置
- 在服务器上登录注册的实现
- 串的模式匹配-KMP算法
- oralce中spool命令用法
- CMD命令大全