Python - 位变量的大小总是24,而不是它的大小

时间:2015-05-11 23:00:13

标签: python python-2.7

如果0b0表示1位“0”,为什么sys.getsizeof(0b0)会产生24?此外,sys.getsizeof总是产生24,无论你给它的二进制值的大小有多长。

sys.getsizeof(0b0)不应该产生1?

4 个答案:

答案 0 :(得分:2)

Python无法在1位内存中存储1位值,甚至不能存储1个字节。像类型指针和引用计数这样的开销,它的int类型总是使用固定数量的字节来存储它所代表的实际数字,取决于你的Python构建4或8字节。 (还有long类型,它不是固定大小的,但即使该类型也使用大于一个字节的块。)

答案 1 :(得分:1)

user2357112可以很好地描述sys.getsizeof给你的内容。相反,如果您试图询问“我如何获得数字中的有效位数”,您可以尝试:

len(bin(some_num)) - 2 # strips 0b

或者,感谢user2357112的评论:

max(some_num.bit_length(), 1)  # minimum bound since (0).bit_length() == 0

答案 2 :(得分:1)

与user2357112一样,这24个字节大多包含管理数据。它 大于24,你还没有尝试过足够大的数字:

>>> sys.getsizeof(0b111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)
42

如果您想询问“数字有多少位”,请使用bit_length方法:

>>> 0b0.bit_length()
0
>>> 0b1.bit_length()
1
>>> 0b1010101.bit_length()
7

答案 3 :(得分:1)

0b0不代表 1位 0,但整数为零。 0b前缀只是在base-2而不是base-10系统中写入数字的一种方式。

要获得表示整数所需的位数,请使用bit_length方法。