Python对象 —— List对象

Python中的List对象

PyListObject对象

对象内部存储元素的内存地址

使用allocated属性存储列表申请下的内存地址的大小,即当前列表可容纳的元素总数。

列表实际使用的内存数量存储在ob_size中

PyListObject 对象的创建与维护

创建对象

  1. 计算系统内存是否支持对象创建
  2. 创建PyListObject并根据状态创建缓冲池
  3. 申请存储列表中元素的内存地址
  4. 创建ob_size和allocated

设置元素

  1. 检查值和索引的类型和有效性
  2. 将指针放到指定位置
  3. 调整引用计数

插入元素


  1. 通过调用内部的ins函数处理插入
  2. 判断内存是否充足
    • 如果剩余内存是占用内存的2倍时,则直接使用
    • 如果不足,则申请重新分配内存
  3. 通过递归空出指定位置的空间,元素向后一位
  4. 插入元素

删除元素

调用顺序pyList.remove() -> cython listremove() -> list_ass_slice()

除了删除元素,列表在切片和替换方法内也使用了list_ass_slice方法用于给予空值

在list_ass_slice中删除元素的操作是通过搬运内存来实现的

PyListObject对象缓冲池


在列表删除的过程:

  1. 删除列表中存储的内存指针,并对内存地址中的数据进行引用计数-1
  2. 查看缓冲池是否已满,未满则将空列表对象PyListObject存入缓冲池中,下次申请可重新使用

posted on 2023-07-15 02:44  lwxc  阅读(232)  评论(0)    收藏  举报