list.sort()内部实现机制为:Timesort
Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率。Tim Peters在2002年设计了该算法并在Python中使用(TimSort 是 Python 中 list.sort 的默认实现)。该算法找到数据中已经排好序的块-分区,每一个分区叫一个run,然后按规则合并这些run。Pyhton自从2.3版以来一直采用Timsort算法排序,现在Java SE7和Android也采用Timsort算法对数组排序。
最坏时间复杂度为:O(n logn)
空间复杂度为:O(n)
示例结果:
[1, 2, 3, 4, 5] [100, 2, 3, 4, 5]l2与l1指向同一片内存空间
如果想复制l1的值,对l2进行操作不影响l1,就需要进行浅拷贝或者深拷贝。
浅拷贝:如果列表中的元素中没有列表或者字典,有如下方法可以进行浅拷贝:l2 = l1[:] //1.利用切片 l2 = copy.copy(l1) //2.import copy模块 l3 = list(l1) //3.使用列表生成方法 //4.建立空列表,使用extend方法 l2 = [] l2.extend(l1) //5.列表生成式: [i for i in l1] 深拷贝:同样的引用机制,元素中出现列表时,想要复制所有的数据,需要进行深拷贝:l2 = copy.deepcopy(l1) //import copy模块set存储原理与字典相同,但是只存入一个内容,没有键值对。也无法重复存放。
不同于C++中map与set实现用红黑树,插入,查找和删除都可以在logn的时间复杂度完成,Python中的字典与集合底层依靠哈希表(hash table)实现, 使用开放寻址法解决冲突,实现插入和查找的O(1)复杂度。但是相应的总有空白元素的数组, Python至少保证1/3的数组是空的,也就是用空间来换取时间的一种方法。 【参考文章】
[1] Python列表赋值,复制,深拷贝以及5种浅拷贝详解[2] python字典实现原理-哈希函数-解决哈希冲突方法[3] Set中的元素为什么不允许重复[4] python sort函数内部实现原理