参考文献
http://blog.jobbole.com/65218/
说起python,最基础的数据结构自然就是List、Tuple、Dictionary以及Set。大多数程序只需要这几种数据结构就够了。python中也存在更高级的数据结构。
##list
names = ['Michael', 'Bob', 'Tracy']
##tuple
classmates = ('Michael', 'Bob', 'Tracy')
##dict
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Michael']=20
##set
s = {"1", "2"}
Collections模块
Deque
Deque是一种由队列结构扩展而来的双端队列(double-ended queue),队列元素能够在队列两端添加或删除。
Deque支持线程安全的,经过优化的append和pop操作,在队列两端的相关操作都能够达到近乎O(1)的时间复杂度。虽然list也支持类似的操作,但是它是对定长列表的操作表现很不错,而当遇到pop(0)和insert(0, v)这样既改变了列表的长度又改变其元素位置的操作时,其复杂度就变为O(n)了。
Defaultdict
这个类型除了在处理不存在的键的操作之外与普通的字典完全相同。当查找一个不存在的键操作发生时,它的default_factory会被调用,提供一个默认的值,并且将这对键值存储下来。其他的参数同普通的字典方法dict()一致,一个defaultdict的实例同内建dict一样拥有同样地操作。
Array模块
array模块定义了一个很像list的新对象类型,不同之处在于它限定了这个类型只能装一种类型的元素。array元素的类型是在创建并使用的时候确定的。
如果你的程序需要优化内存的使用,并且你确定你希望在list中存储的数据都是同样类型的,那么使用array模块很合适。举个例子,如果需要存储一千万个整数,如果用list,那么你至少需要160MB的存储空间,然而如果使用array,你只需要40MB。但虽然说能够节省空间,array上几乎没有什么基本操作能够比在list上更快
heapq模块
heapq模块使用一个用堆实现的优先级队列。堆是一种简单的有序列表,并且置入了堆的相关规则。
Weakref
python里的类似java的弱引用机制