我用以下代码测试了整数:
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
倍吗?
答案 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)
来获取一个整数的大小。