黑盒子专栏之list

python中的list并非传统上的list,因为传统的list是个链表。

链表(linked list),通常是由一系列节点来实现的,其每个节点(尾节点除外)中都持有一个指向下一节点的引用。

举个例子,简单实现如下:

Python 2.7.5 (default, Aug  4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Node:
...     def __init__(self, value, next=None):
...             self.value=value
...             self.next = next
...
>>> L = Node("a", Node("b", Node("c", Node("d"))))
>>> L.value
'a'
>>> L.next
<__main__.Node instance at 0x7f719309ef80>
>>> L.next.value
'b'
>>> L.next.next.value
'c'
>>> L.next.next.next.value
'd'
>>>

双向链表,还需要持有一个指向前一节点的引用。

python中的list与链表不同,它不是由若干个独立的节点相互作用而成的,而是一整块单一连续的内存区块,通常称之为数组(array)。

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

这就导致insert的效率往往比append的效率要差。
insert插入时,可能需要移动插入点后面的所有数据,如果内存块不够的话,还需要整体复制到一个更大的内存块。
而append则很少发生这种情况。

待补充~~~

发布了77 篇原创文章 · 获赞 55 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/langhailove_2008/article/details/100357945
今日推荐