python list底層實現

2021-10-09 15:27:34 字數 873 閱讀 3434

列表實現可以是陣列和鍊錶。這裡數值是指動態陣列。

因此:利用 list.insert(i,item) 方法在任意位置插入乙個元素——複雜度o(n)

利用 list.pop(i) 或 list.remove(value) 刪除乙個元素——複雜度o(n)

在python的列表中,無一例外地存放的都是pyobject指標。所以實際上,我們可以這樣看待python中的pylistobject:vector>。

顯然pylistobject是乙個變長物件,同時它還支援插入和刪除等操作,所以它還是乙個可變物件。

list 本質上是乙個長度可變的連續陣列。其中 ob_item 是乙個指標列表,裡邊的每乙個指標都指向列表中的元素,而 allocated 則用於儲存該列表目前已被分配的空間大小。

allocated 和列表的實際空間大小不同,列表實際空間大小,指的是 len(list) 返回的結果,也就是上邊**中注釋中的 ob_size,表示該列表總共儲存了多少個元素。而在實際情況中,為了優化儲存結構,避免每次增加元素都要重新分配記憶體,列表預分配的空間 allocated 往往會大於 ob_size。

newsize < allocated && newsize >allocated/2:簡單調整ob_size

其他情況下重新分配記憶體空間

python不僅在記憶體不夠用的時候會給pylistobject分配更多的記憶體,當newsize < allocated/2時,還會收縮記憶體空間,以達到記憶體利用的最大化。

tuple 和 list 相似,本質也是乙個陣列,但是空間大小固定。不同於一般陣列.

參考:python的列表(list)的底層實現原理;

python中的list物件(《python原始碼剖析》筆記四);

python列表和元組的底層實現

STL底層實現

1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快速增刪,也支援隨機訪問 deque是乙個雙端佇列 double ended que...

底層實現視窗

6.處理視窗過程 callback 代表 stdcall 引數的傳遞順序,從左往右依次入棧,並且在函式返回前清空堆疊 lresult callback windowproc hwnd hwnd,訊息所屬視窗控制代碼 uint umsg,具體訊息名稱 wm x 訊息名稱 wparam wparam,鍵...

malloc底層實現

1.結論 2.背景 3.分配原理 4.具體情況 1 malloc 小於128k的記憶體時,使用brk系統呼叫在堆上申請記憶體 2 malloc 大於128k的記憶體時,使用mmap系統呼叫在棧與堆之間的對映區分配記憶體 1.結論 1 當開闢的空間小於 128k 時,呼叫 brk 函式,malloc ...