我在尝试使用sys
的getsizeof()
时发现False
(或0
)占用的字节数比True
(或1
)少。为什么呢?
import sys
print("Zero: " + str(sys.getsizeof(0)))
print("One: " + str(sys.getsizeof(1)))
print("False: " + str(sys.getsizeof(False)))
print("True: " + str(sys.getsizeof(True)))
# Prints:
# Zero: 24
# One: 28
# False: 24
# True: 28
事实上,其他数字(包括一些由多个数字组成的数字)也是28字节。
for n in range(0, 12):
print(str(n) + ": " + str(sys.getsizeof(n)))
# Prints:
# 0: 24
# 1: 28
# 2: 28
# 3: 28
# 4: 28
# 5: 28
# 6: 28
# 7: 28
# 8: 28
# 9: 28
# 10: 28
# 11: 28
更令人惊奇的是:sys.getsizeof(999999999)
也是28字节!然而,sys.getsizeof(9999999999)
是32字节。
那到底发生了什么?我猜布尔型True
和False
在内部分别转换为1
和0
,但为什么零的大小与其他较小的整数不同呢?
附带问题:这是否特定于Python(3)表示这些项的方式,还是数字在操作系统中通常都是这样表示的?
0L
,1L
等,您会在Python 2中看到相同的情况。不同之处在于,Python 2有单独的类型int
(固定大小的32位有符号整数)和long
(任意大小的整数),而Python 3将long
重命名为int
并且取消了int
。 - abarnert