python中list的底层实现
这里不讨论具体的实现细节,主要是转载这篇文章: 顺序表的原理与python中的list类型。
原文就不贴过来了,总结一下:
- 确定数据类型的意义在于确定一个数据在内存中占据的空间大小以及如何解释一段内存的含义;
- 同类型数据在内存中连续存储时采用固定的偏移量来定位;
- 不同类型数据需要采用元素外置的方式,在顺序表里面只存储外置元素的指针;
- 顺序表需要保存【容量】以及【已占用】数据,这个“表头”可以放在顺序表中,也可以分离出来;
- 当顺序表的容量不够或者过多时,会自动扩容或者缩容。
再回到作者的结论:
list有以下几个特点:
1.元素有位置下标,以索引就可以直接取到元素 --> 连续的存储空间,以偏移量计算取得元素,不必遍历所有元素
2.元素无论如何改变,表对象不变,也就是其id不变 --> 分离式结构,表头和元素内容分开储存,这样在更改list时,表对象始终是同一个,只是其指向的地址不同
3.元素可以是任意类型 --> 既要要求是连续存储,又可以存储不同类型的数据,那么其用的就是元素外置的方式,存储的只是地址的引用
4.可以任意添加新元素 --> 要能不断地添加新元素,其使用了动态扩充的策略