Python语言中List的底层是用C语言的结构表示的;ob_item用来保存列表元素的指针数组,allocated是给ob_item预先分配的内存总容量。
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
} PyListObject;
1、List 初始化
list申请的内存空间大小allocated和list实际存储元素所占空间的大小ob_size的值要大,避免每次有新元素加入,需要进行扩容
2、List追加(Append) list的内存增长模型是::0, 4, 8, 16, 25, 35, 46, 58, 72, 88, …
3、自动缩容机制
list在元素减少的情况下,当实际元素所占的存储空间小于allocated的一半时,会动态缩小allocated的值,减少内存占用
list底层
ob_item是保存元素的内存地址,所以List可以多种数据类型共存