len(bytes(1000))需要1000个字节的内存吗?

时间:2018-09-28 02:13:42

标签: python

我用以下代码测试了整数:

In [10]: bin(5)
Out[10]: '0b101'
In [11]: bytes(5)
Out[11]: b'\x00\x00\x00\x00\x00'

然后我检查了字节的长度(5)

In [13]: len(bytes(5))
Out[13]: 5

In [14]: len(bytes(1000))
Out[14]: 1000

这是否意味着integer 1000占用了内存中的1000个字节?
integer 1000比“文本”贵250倍吗?

3 个答案:

答案 0 :(得分:2)

bytes(5)创建一个具有5个字节的bytes对象,每个对象都初始化为'\x00'(空字节)。它不会创建整数5。

len函数返回容器对象中的元素数。要检查对象的内存占用量,您应该改用sys.getsizeof方法:

>>> import sys
>>> sys.getsizeof(bytes(5)) # memory footprint of a bytes object with a length of 5
22
>>> sys.getsizeof(5) # memory footprint of the integer 5
14
>>>

答案 1 :(得分:0)

>>> len(bytes(5))
1
>>> len(bytes(1000))
4

我的输出不同于您的输出。

答案 2 :(得分:0)

bytes的含义在python2和python3中是不同的。

在python2中,它只是str的别名:

bytes(1000) -> '1000' # the length is 4

在python3中,它使用您使用第一个参数指定的空字节初始化:

bytes(1000) -> b'\x00\x00...' # so the length is 1000.

如果您只是想知道为什么上面的代码给出上面的输出,就这些。

但是,如果您只想知道1000的大小,则可以使用sys.getsizeof(1000)来获取一个整数的大小。