Python

列表对象实现原理

Python

中的列表基于

PyListObject

实现,列表支持元

素的插入、删除、更新操作,因此

PyListObject

是一个变长

对象(列表的长度随着元素的增加和删除而变长和变短)

同时它还是一个可变对象(列表中的元素根据列表的操作而

发生变化,内存大小动态的变化)

PyListObject

的定义:咋一看

PyListObject

对象的定义非常

简单,除了通用对象都有的引用计数(

ob_refcnt

、类型信

息(

ob_type

,以及变长对象的长度(

ob_size

)之外,剩下

的只有

ob_item

,和

allocated

ob_item

是真正存放列表元

素容器的指针,专门有一块内存用来存储列表元素,这块内

存的大小就是

allocated

所能容纳的空间。

alloocated

是列表所能容纳的元素大小,而且满足条件:

0

len(list) == ob_sizeob_item == NULL

ob_size ==

allocated == 0

列表对象的创建

PylistObject

对象的是通过函数

PyList_New

创建而成,

接收

参数

size

,该参数用于指定列表对象所能容纳的最大元素个

数。

创建过程大致是:

检查

size

参数是否有效,

如果小于

0

直接返回

NULL

,创建失败检查

size

参数是否超出

Python

所能接受的大小,如果大于

PY_SIZE_MAX

64

位机器为

8

字节,

32

位机器为

4

字节)

内存溢出。

检查缓冲池

free_list

python列表的实现原理_Python列表对象实现原理相关推荐

  1. python对象底层原理_Python字符串对象实现原理详解

    在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...

  2. python列表的实现原理_python列表推导式原理和使用方法

    偶尔会在python中看见这样一行代码: data = [x**2 for x in range(0, 5)] # 此时data = [0, 1, 4, 9, 16] 如果不知道背后的语法规则,那么很 ...

  3. python列表解析式如何使用_python列表推导式操作解析

    python列表推导式操作解析 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本格式 ​[表达式 ...

  4. python列表的表示形式_python 列表推导式

    1.列表推导式书写形式: [表达式  for  变量 in  列表]   或者 [表示式   for  变量  in  列表 if 条件] 1 #!/usr/bin/python 2 #-*- cod ...

  5. python列表有哪些操作_python列表的基本操作有哪些

    python列表的基本操作有:1.创建列表,只要把逗号分隔的不同的数据项使用方括号括起来:2.添加新的元素:3.遍历列表:4.访问列表中的值:5.从list删除元素. 相关免费学习推荐:python教 ...

  6. python列表到元祖_python列表与元祖

    python 的列表和元素: 共同点:有序的 区别:1.列表可以修改增加删除列表内容,元组不能修改 联系:元组中包含列表的元素,可以修改列表元素. 分析:1.列表:LIST1=[1,2,3,4,5,6 ...

  7. python列表定义和操作_Python 列表的定义及操作

    #列表概念:有序的可变的元素集合 #定义#直接定义 nums = [1,2,3,4,5]#通过range函数构造,python2 和python3 版本之间的差异:#python3 用的时候才会去构造 ...

  8. python列表字典的区别_python列表和字典区别

    列表 1.任意对象的有序集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过偏移读取 组成列表的值叫做元素(Elements).每一个元素被标识一个索引,第一个索引是0,序列的功能都能实现 ...

  9. python列表怎么比较大小_python列表怎么比较大小

    Python中可以使用cmp()函数比较两个列表的大小. cmp()函数语法:cmp(list1, list2) 参数: list1 -- 比较的列表.list2 -- 比较的列表. 返回值: 如果比 ...

最新文章

  1. ASP.NET Core Web Razor Pages系列教程一:使用ASP.NET Core 创建一个Razor Pages网络应用程序
  2. sql注入程序_Java应用程序中SQL注入
  3. Redis ops详解
  4. 自学Python:截取屏幕画面
  5. 第二轮冲刺-Runner站立会议06
  6. [Python入门及进阶笔记]Python-魔术方法小结(方法运算符重载)
  7. 数据库Oracle 11g的安装步骤
  8. fiddler如何伪造referrer_Fiddler抓包神器带你遨游网络,叱咤风云,为所欲为
  9. 计算机二级vfp表格应用,计算机二级VFP辅导:VFP表的关联
  10. Python语言程序设计基础_实验4 流程控制II_答案_通识教育必修课程_上海师范大学
  11. 用go写一个docker(9)-初步构造容器
  12. 重磅!22张深度学习精炼图笔记总结!
  13. 苹果电脑怎么用c语言编程,mac电脑怎么调试c语言
  14. Mysql.ACID
  15. 计算机网络实验 ——wireshark抓包简要分析TCP、UDP协议
  16. 平凡前端之路_05.CSS与CSS3
  17. 4511或74LS48来实现BCD转7段数码管及逻辑状态输入演示
  18. MapGIS基本操作实例(坐标配准、矢量化、统计属性、缓冲分析、属性连接等)
  19. Excel表格某些字段批量导入word
  20. 苹果手机上网很慢_@家长:手机学习防沉迷!翼课网“上网管控”苹果amp;安卓系统使用说明...

热门文章

  1. Codeforces Round #469 (Div. 2) A/B
  2. 关于libStagefright系列漏洞分析
  3. #HTTP协议学习# (二)基本认证
  4. Android Material各种颜色设置
  5. SB Admin 2 学习笔记1
  6. 消息中间件的多个企业级场景案例--分析
  7. 设计模式----模板方法模式UML和实现代码
  8. 使用tcgetattr函数与tcsetattr函数控制终端
  9. LINUX TOP,不是这样玩地!!!
  10. 融资3000万,腾讯大佬随手开发的工具到底有多牛?