列表 pop 操作的平均复杂度为 O(1)。

可以看到 pop 操作后槽空间 4 依然指向本来的┞符数对象,然则最为关键的是如今列表的大年夜小已经变为 4。
持续 pop 一个元素。在 list_resize() 函数中,size – 1 = 4 – 1 = 3 已经小于所分派的槽空间大年夜小的一半,所以缩减分派的槽空间为 6,同时如今列表的大年夜小为 3。
可以看到槽空间 3 和 4 依然指向本来的┞符数,然则如今列表的大年夜小已经变为 3。

Remove 操作
Python 的列表对象有个办法,删除指定的元素: l.remove(5)。底层调用 listremove() 函数。
- arguments: list object, element to remove
- returns none if OK, null if not
- listremove:
- loop through each list element:
- if correct element:
- slice list between element's slot and element's slot + 1
- return none
- return null
为了做列表的切片并且删除元素,调用了 list_ass_slice() 函数,它的实现办法比较有趣。我们在删除列表地位 1 的元素 5 的时刻,低位的偏移量为 1 同时高位的偏移量为 2.
- arguments: list object, new size
- returns: 0 if OK, -1 if not
- list_resize:
- new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6) = 3
- new_allocated += newsize = 3 + 1 = 4
- resize ob_item (list of pointers) to size new_allocated
- return 0
- arguments: list object, low offset, high offset
- returns: 0 if OK
推荐阅读
比来进修了一点收集爬虫,并实现了应用Python来爬取知乎的一些功能,这里做一个小的总结。收集爬虫是指经由过程必定的规矩主动的大年夜网上抓取一些信息的法度榜样或脚本。我们知道机械进>>>详细阅读
本文标题:深入Python列表的内部实现
地址:http://www.17bianji.com/lsqh/35408.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示