繁体   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