sys.getsizeof() 值不随浮点值的增加而增加
sys.getsizeof() value doesn't increase with increase of float value
在玩 sys.getsizeof()
时,我注意到 returns 随着它们的大小增加,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
是因为它们是 浮点数 数字。
为了简化,floats
存储为a * b ** c
,其中a
、b
和c
各占一定的分别固定位数。因此,直觉上,如果 f
是一个浮点数,f * 10 ** 10
不会比 f
占用更多 space,因为我们只需要将 c
增加 log_2 log_2 (10 ** 10) = 5
(一般情况下,b
是一个常数,比如2)。
当然,这样做的另一面是我们只能用浮点数表示一定数量的有效数字,这就是为什么 运行 一段时间后会出现舍入错误的原因。
在Python中,ints
为定点、任意精度和可变宽度。这意味着 int
可以根据内存限制增长到您想要的大小。它占用的 space 的数量与其大小成正比,因为它必须单独存储每个数字(或多或少),而不是像 floats
那样进行基于指数的计算。因此,将 int
i
乘以 10 ** 10
将需要 log_2(10 ** 10) = 33
额外位。
为了完整起见,我会注意到在 C
之类的内容中,对应的 int
与 float
一样是固定宽度的,因此等效的 sizeof
将return 与 int
.
的大小无关的相同值
在玩 sys.getsizeof()
时,我注意到 returns 随着它们的大小增加,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
是因为它们是 浮点数 数字。
为了简化,floats
存储为a * b ** c
,其中a
、b
和c
各占一定的分别固定位数。因此,直觉上,如果 f
是一个浮点数,f * 10 ** 10
不会比 f
占用更多 space,因为我们只需要将 c
增加 log_2 log_2 (10 ** 10) = 5
(一般情况下,b
是一个常数,比如2)。
当然,这样做的另一面是我们只能用浮点数表示一定数量的有效数字,这就是为什么 运行 一段时间后会出现舍入错误的原因。
在Python中,ints
为定点、任意精度和可变宽度。这意味着 int
可以根据内存限制增长到您想要的大小。它占用的 space 的数量与其大小成正比,因为它必须单独存储每个数字(或多或少),而不是像 floats
那样进行基于指数的计算。因此,将 int
i
乘以 10 ** 10
将需要 log_2(10 ** 10) = 33
额外位。
为了完整起见,我会注意到在 C
之类的内容中,对应的 int
与 float
一样是固定宽度的,因此等效的 sizeof
将return 与 int
.