1、python标准库用C实现了丰富的序列类型:

  • 容器序列(Container sequences):list、tuple、collections.deque这些序列能存放不同类型数据。
  • 扁平序列(Flat sequences):str、bytes、bytearray、memoryview、array.array这些序列只能容纳一种类型。
  • 可变序列(Mutable sequences):list、bytearray、array.array、collections.deque、memoryview这些序列可以原地修改。
  • 不可变序列(Immutable sequences):tuple、str、bytes这些序列不能原地修改。

  下图是序列对象的继承关系,箭头从子类指向父类,可以看到可变对象之所以能够修改是因为实现了__setitem____delitem__等方法。

  2、python会忽略代码里[]、()、{}中的换行,所以写列表推导时直接回车换行,不用加续行符“\”。

  3、当使用“*”对序列进行复制时,要保证序列里没有对其他可变对象的引用,引用只能浅复制,当修改其中一个引用时,其他的也会改变。如下:

  4、不要把可变对象放到元组里,修改元组里的可变对象虽然会抛出异常,但对象可能会真的被修改。

  5、list.sort()原地排序,sorted()创建新列表排序并返回。

  6、如果需要一个只包含数字的列表,使用array.array比list更高效,因为list将数字存成python的整形和浮点型,而array.array把数字直接存成机器翻译,也就是字节表述。道理是这样,用的时候还是对比一下速度吧,list、array和numpy的array。

  7、python内置的排序函数使用了Timsort排序算法。Timsort混合了插入排序和归并排序,因为真实世界中的数据往往带有一定的顺序,所以根据输入的特点进行分区,分区内插入排序,分区间归并排序。