2.2 python列表
python列表是一种可变的序列容器。本节主要讲python列表的实现,涉及C语言层面。
2.2.1 创建python列表
如下所示:
>>> pyList = [4, 12, 2, 34, 17]
当python列表被创建时,一个数组被创建出来,以储存列表中的元素,并且这一数组的长度是大于列表的长度的。数组中储存python对象的部分称为子数组(subarray)。如下图所示:
列表的len()返回的是子数组的长度,而不是底层数组的长度。
2.2.1 增加元素
>>> pyList.append(50)
列表的append()方法是向列表末尾增加一个元素,如果底层数组未满,则会将元素储存在底层数组中,列表长度随之增加1。
而如果底层数组已满,则
- 创建一个新的数组,新数组比原数组更长;
- 将原数组中的元素复制到新数组中来;
- 新数组被设定为列表数据类型 ;
- 删除原数组。
2.2.3 合并列表
合并另一个列表与增加元素的情况类似,但要注意,此时python是在第一个列表的底层数组的基础上,增添第二个列表的长度,而不是第二个列表的底层数组长度。
2.2.4 插入元素
>>> pyList.insert(3, 79)
python将指定位置的腾空,即之后的元素都向后移一位,如果底层数组已满,则像append的情形一样,创建新的数组来储存。
在删除元素后,引用变量将会被设为None,随后其后的元素向前移一位。与append()相反,当列表长度减少到一定程度后,比如说少了一半,其底层数组,也会重新新建,数组的长度也会减半。
2.2.5 列表切片
列表切片是创建一个新列表,来储存原列表中的某些连续的元素。既然是创建新列表,这也意味着会有新的底层数组会被创建,而这一创建出来的数组长度与新列表长度相关,与原列表长度无关。