gpt4 book ai didi

python - sys.getsizeof() 值不会随着浮点值的增加而增加

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:35 28 4
gpt4 key购买 nike

在使用 sys.getsizeof() 时,我注意到随着 ints 的大小增加,它会返回更高的值,这表明它们使用了更多的内存:

>>> sys.getsizeof(3)
28
>>>

>>> sys.getsizeof(300000000000000000000000)
36

但是使用floats,无论大小如何,我都得到相同的内存使用量:

>>> sys.getsizeof(3.0)
24

>>> sys.getsizeof(300000000000000.111111111)
24

>>> sys.getsizeof(300000000000000000000000.111111111)
24

>>> sys.getsizeof(300000000000000000000000.1111133333333331111)
24

根据docs ,我应该得到内置类型的准确内存使用情况:

Return the size of an object in bytes. The object can be any type of object. All built-in objects will return correct results, but this does not have to hold true for third-party extensions as it is implementation specific

最佳答案

名称 float 源于它们是浮点 数字这一事实。

为了简化, float 被存储为a * b ** c,其中abc 各自占用一定的固定位数。因此,直觉上,如果 f 是一个 float ,f * 10 ** 10 不会比 f 占用更多的空间,因为我们只需要将c增加log_2 log_2 (10 ** 10) = 5(通常b是一个常量,比如2)。

当然,另一方面,我们只能用 float 表示一定数量的有效数字,这就是为什么您会在一段时间后遇到舍入错误的原因。

在 Python 中,int 是定点的、任意精确的和可变宽度。这意味着 int 可以根据内存限制增长到您想要的大小。它占用的空间量与其大小成正比,因为它必须单独存储每个数字(或多或少),而不是像 floats 那样进行基于指数的计算。因此,将 int i 乘以 10 ** 10 将需要 log_2(10 ** 10) = 33额外的位。

为了完整起见,我会注意到在 C 中,相应的 intfloat 一样,是固定宽度的,因此无论 int 的大小如何,等效的 sizeof 都会返回相同的值。

关于python - sys.getsizeof() 值不会随着浮点值的增加而增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55804403/

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