當前位置:編程學習大全網 - 源碼下載 - Python中list的實現

Python中list的實現

原始鏈接

本文介紹了list是如何在Python中實現的。

列表在Python中特別有用。讓我們來看看列表是如何在內部實現的。

看看下面這個簡單的程序,在列表中加入壹些整數,然後打印出來。

如您所見,該列表可以叠代。

Python中的List由C語言的以下結構表示。Ob_item是用來保存元素的指針數組,allocated是ob_item預分配的總內存容量。

讓我們看看當壹個空列表被初始化時會發生什麽L = []

知道list申請的內存空間大小(後來被allocated代替)和list實際存儲元素占用的空間大小(ob_size)之間的關系是非常重要的。ob_size的大小與len(L)的大小相同,而allocated的大小是內存中已經申請的空間大小。通常妳會看到allocated的值大於ob_size的值。這是為了避免每次向列表中添加新元素時調用realloc進行內存分配。接下來我們會看到更多關於這些的內容。

我們將壹個整數追加到列表中:L.append(1)。發生了什麽事?調用了內部c函數app1()。

我們來看看list_resize()。List _ resize()將申請額外的空間,以避免多次調用list _ resize()函數。列表增長的模型是:0,4,8,16,25,35,46,58,72,88,…

打開四個內存空間來存儲列表中的元素,存儲的第壹個元素是1。從下圖可以看到,L[0]指向我們剛剛添加的元素。虛線框表示已經申請但尚未使用的內存空間。

現在讓我們在列表的第壹個位置插入壹個整數5:L.insert(1,5),看看裏面會發生什麽。調用了Ins1()。

當妳彈出列表的最後壹個元素:L.pop()。調用listpop(),如果ob_size小於allocated的壹半,則在函數listpop()內部調用list_resize。此時,請求的內存空間將會減少。

Pop的時間復雜度為O(1)。

Python列表對象有壹個移除指定元素的方法。調用listremove()。

剪切list和delete元素,調用list_ass_slice()看看list_ass_slice()是怎麽工作的。這裏,低位是1,高位是2。我們刪除存儲在內存空間1中的數據5。

移除的時間復雜度為O(n)

列表的排序部分沒有翻譯。

鐵桿分子

  • 上一篇:關於CSOL和CF
  • 下一篇:廣西有哪些生活和說話禁忌
  • copyright 2024編程學習大全網