gpt4 book ai didi

python sizeof 列表与 sizeof 元组

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:36 28 4
gpt4 key购买 nike

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

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

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

我理解列表和元组之间的区别,但我希望它们的 sizeof (内存中对象的大小) 是相同的:都带有方法并且都包含相同的值。

此外,尺寸差异取决于元素的长度:

>>> 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 没有理由预先分配更多元素。

关于列表增长算法的一些引用资料:

关于python sizeof 列表与 sizeof 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42108466/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com