[toc]
序列构成的数组
python标准库用C实现了丰富的序列类型
- 容器序列
- list、turple和collection.deque,这些序列能够存放不同的数据
- 存放的包含任意对象类型的引用
- 扁平序列
- str、bytes、bytearray、memoryview和array.array,这些类型只能容纳一种类型
- 一段连续的内存空间,存放的是值,只能存放字符、字节和数值这种基础类型
按照能否被修改来分类
- 可变序列
- list、bytearray、array.array、colllection.deque和memoryview
- 不可变序列
- tuple、str和bytes
列表推导式和生成器表达式
只用列表推导式来创建一个新的列表,如果列表推导式过长,超过两行,那就要考虑是否要用for重写
在Python2里面for关键字之后的赋值操作可能会影响列表中的同名变量,比如
1 | x = "hhh" |
而在Python3里面不会出现这个问题,在Python3里面都会有自己的局部作用域
生成器表达式能够节约内存
元组不仅仅是不可变的列表,还是没有字段名的记录
元组里面携带了包含了所有的元素的总数和他们的位置,在任何的表达式里面我们对元组进行排序,那么这些携带的信息就会丢失
对列表的切片进行赋值
对序列使用+或者*都会创建一个新的对象而不会修改原有对象
- 不要把可变对象放到元组里面
- 增量赋值不是一个原子操作,先加再赋值
- 查看python的字节码并不难
list.sort()不会产生新的列表,而是在原有的列表上进行赋值,而sorted会产生一个新的列表