美文网首页
python中的list dict原理实现

python中的list dict原理实现

作者: 将军红 | 来源:发表于2019-12-19 17:05 被阅读0次

1. 深入 Python 列表的内部实现

参考文档

1.1. 列表是一个迭代器。

1.2. 内部

C 结构体。ob_item 是指向列表对象的指针数组。allocated 是申请内存的槽的个数。

typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;


typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;

1.3. 申请槽的算法:list_resize() 函数

new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6) = 3
0,4,8,16,25,35,46,58,72,88……

1.4. 操作复杂度

append, pop 复杂度都是O(1) 都是槽的尾部处理,不用查找

insert, remove复杂度都是O(n) 需要调整 槽的index

insert(index, value)

remove(index)

2. 深入 Python 字典的内部实现

参考文章

2.1 内部实现

typedef struct {
    Py_ssize_t me_hash;
    PyObject *me_key;
    PyObject *me_value;
}       PyDictEntry;

me_hash为me_key的hash值
me_key与me_value都是PyObject指针类型,所以都可以指向Python任何类型

2.2 存储

  1. 使用散列表进行存储

  2. 使用开放定址法处理冲突

    2.1 插入, 发生冲突, 通过二次探测算法, 寻找下一个位置, 直到找到可用位置, 放入(形成一条冲突探测链)

    2.2 查找, 需要遍历冲突探测链

    2.3 删除, 如果对象在探测链上, 不能直接删除, 否则会破坏整个结构(所以不是真的删),置标志位???

相关文章

网友评论

      本文标题:python中的list dict原理实现

      本文链接:https://www.haomeiwen.com/subject/oafvnctx.html