Python对象 —— List对象
Python中的List对象
PyListObject对象
对象内部存储元素的内存地址
使用allocated属性存储列表申请下的内存地址的大小,即当前列表可容纳的元素总数。
列表实际使用的内存数量存储在ob_size中
PyListObject 对象的创建与维护
创建对象
- 计算系统内存是否支持对象创建
- 创建PyListObject并根据状态创建缓冲池
- 申请存储列表中元素的内存地址
- 创建
ob_size和allocated
设置元素

- 检查值和索引的类型和有效性
- 将指针放到指定位置
- 调整引用计数
插入元素


- 通过调用内部的
ins函数处理插入 - 判断内存是否充足
- 如果剩余内存是占用内存的2倍时,则直接使用
- 如果不足,则申请重新分配内存
- 通过递归空出指定位置的空间,元素向后一位
- 插入元素
删除元素
调用顺序pyList.remove() -> cython listremove() -> list_ass_slice()

除了删除元素,列表在切片和替换方法内也使用了list_ass_slice方法用于给予空值
在list_ass_slice中删除元素的操作是通过搬运内存来实现的
PyListObject对象缓冲池

在列表删除的过程:
- 删除列表中存储的内存指针,并对内存地址中的数据进行引用计数-1
- 查看缓冲池是否已满,未满则将空列表对象PyListObject存入缓冲池中,下次申请可重新使用
本文来自博客园,作者:lwxc,转载请注明原文链接:https://www.cnblogs.com/mars-zhz/articles/17555445.html
浙公网安备 33010602011771号