Python中的列表属于采用分离式技术实现的动态顺序表
顺序表表示元素保存在一块连续的存储区中。
分离式是为了保证表对象的标识id不会变化,即连续的存储中存的是每个元素的存储地址,访问元素时,先在连续的存储区中找到对应的存储地址(每个存储地址占4个字节),再拿存储地址去访问元素。
动态是指可以进行元素存储区扩充,Python官方实现中,list采用如下策略:建立空表时,系统分配一块能容纳8个元素的存储区,在执行插入操作时,如果元素存储区满就换一块4倍大的存储区。但是如果表的大小超过50000,则改变策略,每次增加一倍,这样是为了避免出现过多空闲的存储位置。
另外,一般表的扩充有两种策略:
- 每次增加固定数目的存储位置,如每次扩大10个元素位置,这种策略称为线性增长(特点: 节省空间,但是扩充操作次数频繁)
- 每次扩充容量加倍,如每次扩充增加一倍的存储空间(特点: 减少扩充次数,但是可能会造成大量空间浪费。此种方式以空间换时间,为推荐方式)