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则很少发生这种情况。
待补充~~~