`
jinvasshole
  • 浏览: 792202 次
文章分类
社区版块
存档分类
最新评论

【Python旧时笔记 四】PyListObject对象

 
阅读更多
在listobject.h中,有如下定义和注释:

typedefstruct{
PyObject_VAR_HEAD
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
PyObject**ob_item;

/* ob_item contains space for 'allocated' elements. The number
* currently in use is ob_size.
* Invariants:
* 0 <= ob_size <= allocated
* len(list) == ob_size
* ob_item == NULL implies ob_size == allocated == 0
* list.sort() temporarily sets allocated to -1 to detect mutations.
*
* Items must normally not be NULL, except during construction when
* the list is not yet visible outside the function that builds it.
*/
Py_ssize_tallocated;
}PyListObject;

PyListObject是个可变对象,可以在运行时改变负责维护的内存,包括自身的长度和所包含元素的内容。
其中,成员ob_item指向存放元素的内存空间,allocated表示一共分配得到的可以存放元素的数目,
而头部宏中包含的ob_size表示包含的有效元素的数目,因为PyListObject并不是要插入一个元素才申请一次空间的,而是一次性先申请一定数目的空间,即allocated。

需要考察第一次创建过程,以及当表满了后,新增元素的处理。


JasonLee 2011.08.08 22:32 牙疼,犯困,早点休息



Python中使用PyList_New来创建新的PyListObject对象,在创建过程中会使用缓冲池的对象或者新建。
缓冲池的对象由不再使用的PyListObject构成,可以理解为“废物利用”或者“环保重用”。
使用PyList_SetItem来设置PyListObject中某一元素的值。
使用PyList_Insert进行插入,实际上调用的ins1函数,过程会调用到list_resize函数调整大小,类似的还有listappend和listremove函数等。
插入、删除等操作会涉及内存移动。


JasonLee 2011.08.10 23:54 今夜打篮球,早点休息
分享到:
评论

相关推荐

    python核心笔记.pdf

    【第三章 Python基础】和【第四章 Python对象】详细阐述了Python的基础语法,包括变量、数据类型、操作符、控制结构等。Python中的基础数据类型如数字(【第五章】)、序列(如字符串、列表和元组,【第六章】)、...

    Python学习笔记(干货) 中文PDF完整版.pdf

    这份"Python学习笔记"涵盖了从环境搭建到基础语法,再到数据类型和控制结构等关键知识点,旨在为初学者提供全面的学习指导。 首先,1.1章节介绍了Python的基础,包括Python的起源和历史。Python是由Guido van ...

    小甲鱼python教程笔记

    小甲鱼 Python 教程笔记 本教程笔记涵盖了 Python 的基础知识点,包括变量、字符串、列表、元组、布尔类型、逻辑运算符、循环结构、列表访问、成员资格运算符、is 运算符、引用和拷贝、列表推导式、元组的使用、...

    Python学习笔记.pdf

    ### Python学习笔记知识点详解 #### 一、Python简介与特性 **标题与描述解析:** "Python学习笔记.pdf" 的标题直接指出了文档的主题——Python的学习资料,而描述的重复表明该文档的主要内容即为Python的学习笔记...

    python入门笔记(推荐)

    这篇“Python入门笔记”旨在帮助初学者快速掌握Python的基础知识,通过实践操作来加深理解。 首先,Python的语法特点是它的一大亮点。Python代码强调可读性,遵循“缩进决定代码块”的原则,避免了大括号带来的视觉...

    千峰python课件笔记+源码 (凯哥)

    ------- 第一章: 千锋python基础 千锋python基础教程:1、第一个...第四章 Tornado 1、走通Tornado基础流程 2、请求与响应 3、模板和数据库以及接口的调用顺序 4、应用安全 5、同步与异步+使用WebSocket实现在线聊天

    python入门笔记(强烈推荐).pdf

    python刚刚开始学习还没入门的,可以试一下这些例题,掌握快速

    python学习笔记.pdf

    在这份《python学习笔记.pdf》中,记录了Python编程的基础知识和一些技巧,内容涵盖了字符串处理、变量操作、数据结构、循环、条件判断等方面。以下是对学习笔记中提到知识点的详细说明。 ### 字符串处理 在Python...

    《python核心笔记》

    #### 四、《Python核心编程》概述 **书籍特色:** - **内容全面**:涵盖了Python的核心概念和技术,适合初学者和进阶用户。 - **实践导向**:提供了丰富的实例代码和深入的技术解析。 - **结构清晰**:分为两个部分...

    马哥python课堂笔记-马哥教育PYTHON相关基础笔记.pdf

    在马哥教育的PYTHON相关基础笔记中,我们看到几个关键知识点: 1. **推荐书籍**:学习Python时,有几本经典教材值得参考,包括《Python Cookbook》、《Learn Python the Hard Way》、《Google's Python Class》以及...

    最新Python学习笔记3

    本篇学习笔记主要介绍了Python中关于变量指向函数、高阶函数以及特殊高阶函数map()、reduce()、filter()和sorted()的使用方法和原理。 首先,变量在Python中不仅可以指向基本数据类型,还可以指向一个函数名。这...

    Python学习笔记-王纯业

    5. **面向对象编程**:Python是面向对象的语言,初学者会学习类的定义、对象的创建和方法的使用,包括继承、封装和多态等面向对象的概念。 6. **异常处理**:学习如何使用try/except语句进行错误处理,以及finally...

    python基础笔记html.rar

    6. **面向对象编程**:Python支持面向对象编程,可以定义类(class),创建对象。类包含属性(variables)和方法(functions),是面向对象编程的基础。 7. **标准库**:Python有一个庞大的标准库,包含各种常用的...

    王纯业的Python学习笔记

    深入学习Python,你需要理解面向对象编程(OOP)的概念,包括类的定义、对象的创建、继承、封装和多态等。Python的内置数据结构如列表推导式、生成器表达式和上下文管理器也是提高代码效率的重要工具。在函数式编程...

    Python学习笔记md文件.rar

    **Python学习笔记** 这篇笔记是针对初学者设计的,涵盖了Python编程语言的基础知识点,旨在帮助0基础的读者快速入门并掌握Python的核心概念。通过这些笔记,你可以系统地学习Python的语法和其他基本问题,逐步建立...

    Python学习笔记大集合

    Python学习笔记 附赠可爱的Python 同时增加了UltraEdit的高亮显示Shell 及Python的文件

    皮大庆Python学习笔记

    Python基础入门教程,适合Python初学者,文档内容包括, 目录 前言 i 第一章 程序 1 1.1 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 什么是调试 . . . . . . . . . . . . . . . ....

    python的毕业设计云笔记平台分析与设计.zip

    python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台分析与设计python的毕业设计云笔记平台分析与设计。基于python的云笔记平台...

    effective python学习笔记.pdf

    记录了我的effective-Python学习笔记,精简了effective-Python中重要的部分。effective-Python是一本值得多看几遍的书,但是看后面的几遍的时候完全可以直接看自己的学习...此学习笔记侧重与比较实用的部分即前四章。

    Python学习笔记--皮大庆

    特别地,笔记中还提到了如何在Python中重定义操作符和继承机制的使用,这些都是面向对象编程中的重要概念。重定义操作符可以让用户自定义类型的行为,而继承则可以创建出具有共同特性的新类。 从笔记内容来看,...

Global site tag (gtag.js) - Google Analytics