簡體   English   中英

python sizeof列表與sizeof元組

[英]python sizeof list vs sizeof tuple

我在 python 中注意到以下事實:

>>> (1, 2, 3).__sizeof__()
48

>>> [1, 2, 3].__sizeof__()
64

我理解列表和元組之間的區別,但我希望它們的 sizeof (size of object in memory)是相同的:兩者都帶有方法並且都包含相同的值。

此外,尺寸差異取決於物品長度:

>>> for size in (10, 100, 1000, 10000):
        tuple_ = tuple(range(size))
        list_ = list(range(size))
        print list_.__sizeof__(), tuple_.__sizeof__()     
176   104
984   824
9088  8024
90088 80024
  • 我們如何解釋這一點?
  • 我在哪里可以找到有關 python 內部結構的好文檔?

list對象被設計為動態增長(通過appendextend或列表理解構建)。 每次添加元素時執行realloc (和可能memmove )不會有性能。 所以有一個“增長”算法試圖預測需要多少元素(當然這只是統計猜測)。

這就是實際分配的內存可能大於項目數的原因。

tuple對象是不可變的。 Python 沒有理由預先分配更多元素。

關於列表增長算法的一些參考:

根據 Raymond Hettinger 和 tzot 的說法, 元組比 Python 中的列表更有效嗎? ,

基本上,元組的訪問速度比列表快,因為元組是不可變的,因此存儲效率更高。

與元組相反,列表是從頭開始構建的。

如果你想遍歷一個常量序列,元組更好,因為它們在 python 代碼編譯為字節碼時已經計算過。

內存中元組對象的大小小於列表。 但這僅在使用大對象時才明顯。 這就是使元組操作更快的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM