簡體   English   中英

Python list 不知道為什么相差16

[英]Python list I don't know why the difference is 16

>>> import sys
>>> print(sys.getsizeof(int()))
12
>>> print(sys.getsizeof(str()))
25
>>> mylist = [1,2,3,4,5,'ab']
>>> print(id(mylist))
50204144
>>> print(id(mylist[0]))
1849873456
>>> print(id(mylist[1]))
1849873472
>>> print(id(mylist[2]))
1849873488
>>> print(id(mylist[3]))
1849873504
>>> print(id(mylist[4]))
1849873520
>>> print(id(mylist[5]))
50209152

我不知道為什么差異是 16:

64位操作系統

因為它們是列表中的int ,所以整數在內存中的位置是16 到 16位,我真的建議您查看這篇文章: id() 函數用於什么?

看起來您的問題是:如果sys.getsizeof(int())是 12,那么為什么某些id()值相距 16 個字節而不是 12 個字節?

看起來您希望新分配的int彼此相距 12 個字節,因為int需要 12 個字節的存儲空間。

如果您期望這樣做,那是因為您期望 Python 列表類似於 C 數組,這是一塊連續的內存,其中五個 8 字節對象的數組正好占用 40 個字節。 但是 Python 列表不是數組,列表元素不一定按內存升序分配(更不用說打包在一起了)。 因此,您不能期望id()的值可以根據對象占用的內存量進行預測。

如果你真的感興趣的話,一定要了解 Python 數據結構的真正分配方式。 但這是一個如此高級的話題,以至於 CPython 核心團隊之外很少有人需要考慮它。 我們其他人只是滿足於它的工作原理。 這就是為什么您會收到諸如實施細節之評論以及您為什么關心?

了解 C 數組的分配方式很重要,因為在 C 中您可以直接操作內存指針,如果出錯可能是災難性的。 但是 Python 會為您處理內存分配,因此了解其工作原理的所有細節不太可能使您成為更好的 Python 程序員。

暫無
暫無

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

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