python列表的实现原理_Python列表对象实现原理
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列表对象实现原理相关推荐
- python对象底层原理_Python字符串对象实现原理详解
在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...
- python列表的实现原理_python列表推导式原理和使用方法
偶尔会在python中看见这样一行代码: data = [x**2 for x in range(0, 5)] # 此时data = [0, 1, 4, 9, 16] 如果不知道背后的语法规则,那么很 ...
- python列表解析式如何使用_python列表推导式操作解析
python列表推导式操作解析 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本格式 [表达式 ...
- python列表的表示形式_python 列表推导式
1.列表推导式书写形式: [表达式 for 变量 in 列表] 或者 [表示式 for 变量 in 列表 if 条件] 1 #!/usr/bin/python 2 #-*- cod ...
- python列表有哪些操作_python列表的基本操作有哪些
python列表的基本操作有:1.创建列表,只要把逗号分隔的不同的数据项使用方括号括起来:2.添加新的元素:3.遍历列表:4.访问列表中的值:5.从list删除元素. 相关免费学习推荐:python教 ...
- python列表到元祖_python列表与元祖
python 的列表和元素: 共同点:有序的 区别:1.列表可以修改增加删除列表内容,元组不能修改 联系:元组中包含列表的元素,可以修改列表元素. 分析:1.列表:LIST1=[1,2,3,4,5,6 ...
- python列表定义和操作_Python 列表的定义及操作
#列表概念:有序的可变的元素集合 #定义#直接定义 nums = [1,2,3,4,5]#通过range函数构造,python2 和python3 版本之间的差异:#python3 用的时候才会去构造 ...
- python列表字典的区别_python列表和字典区别
列表 1.任意对象的有序集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过偏移读取 组成列表的值叫做元素(Elements).每一个元素被标识一个索引,第一个索引是0,序列的功能都能实现 ...
- python列表怎么比较大小_python列表怎么比较大小
Python中可以使用cmp()函数比较两个列表的大小. cmp()函数语法:cmp(list1, list2) 参数: list1 -- 比较的列表.list2 -- 比较的列表. 返回值: 如果比 ...
最新文章
- ASP.NET Core Web Razor Pages系列教程一:使用ASP.NET Core 创建一个Razor Pages网络应用程序
- sql注入程序_Java应用程序中SQL注入
- Redis ops详解
- 自学Python:截取屏幕画面
- 第二轮冲刺-Runner站立会议06
- [Python入门及进阶笔记]Python-魔术方法小结(方法运算符重载)
- 数据库Oracle 11g的安装步骤
- fiddler如何伪造referrer_Fiddler抓包神器带你遨游网络,叱咤风云,为所欲为
- 计算机二级vfp表格应用,计算机二级VFP辅导:VFP表的关联
- Python语言程序设计基础_实验4 流程控制II_答案_通识教育必修课程_上海师范大学
- 用go写一个docker(9)-初步构造容器
- 重磅!22张深度学习精炼图笔记总结!
- 苹果电脑怎么用c语言编程,mac电脑怎么调试c语言
- Mysql.ACID
- 计算机网络实验 ——wireshark抓包简要分析TCP、UDP协议
- 平凡前端之路_05.CSS与CSS3
- 4511或74LS48来实现BCD转7段数码管及逻辑状态输入演示
- MapGIS基本操作实例(坐标配准、矢量化、统计属性、缓冲分析、属性连接等)
- Excel表格某些字段批量导入word
- 苹果手机上网很慢_@家长:手机学习防沉迷!翼课网“上网管控”苹果amp;安卓系统使用说明...