[英]__sizeof__ str is larger than __sizeof__ a tuple containing that string
[英]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
list
對象被設計為動態增長(通過append
、 extend
或列表理解構建)。 每次添加元素時執行realloc (和可能memmove
)不會有性能。 所以有一個“增長”算法試圖預測需要多少元素(當然這只是統計猜測)。
這就是實際分配的內存可能大於項目數的原因。
tuple
對象是不可變的。 Python 沒有理由預先分配更多元素。
關於列表增長算法的一些參考:
根據 Raymond Hettinger 和 tzot 的說法, 元組比 Python 中的列表更有效嗎? ,
基本上,元組的訪問速度比列表快,因為元組是不可變的,因此存儲效率更高。
與元組相反,列表是從頭開始構建的。
如果你想遍歷一個常量序列,元組更好,因為它們在 python 代碼編譯為字節碼時已經計算過。
內存中元組對象的大小小於列表。 但這僅在使用大對象時才明顯。 這就是使元組操作更快的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.