哪个 python 内置对象在内存中的大小最小?
Which python built-in object has the least size in memory?
# On Python 3.9.2
>>> sys.getsizeof(None)
16
>>> sys.getsizeof(0)
24
>>> sys.getsizeof(True)
28
我只想知道是否有任何对象的大小小于 None
对象的大小,即小于 16 字节。
根据@quamrana的建议,我尝试根据大小对所有内置对象进行排序,并进行了以下观察。
我使用的代码片段:
import builtins, sys, inspect
classes = [i for i in builtins.__dict__.values() if inspect.isclass(i)]
objects = []
for i in classes:
try:
objects.append((i, sys.getsizeof(i())))
except:
...
objects.sort(key=lambda x: x[1])
for i in objects[:10]:
print(i)
上面代码段的标准输出是:
(<class 'object'>, 16)
(<class 'bool'>, 24)
(<class 'float'>, 24)
(<class 'int'>, 24)
(<class 'complex'>, 32)
(<class 'bytes'>, 33)
(<class 'tuple'>, 40)
(<class '_frozen_importlib.BuiltinImporter'>, 48)
(<class 'str'>, 49)
(<class 'bytearray'>, 56)
这些是在我的机器上运行的 Python 3.9.2 上大小最小的 10 个对象。
根据 @martineau 的评论,每个对象的大小因不同的 python 版本和机器而异。
None
将是据我所知最小的可用对象,与系统架构、解释器、版本无关。
# On Python 3.9.2
>>> sys.getsizeof(None)
16
>>> sys.getsizeof(0)
24
>>> sys.getsizeof(True)
28
我只想知道是否有任何对象的大小小于 None
对象的大小,即小于 16 字节。
根据@quamrana的建议,我尝试根据大小对所有内置对象进行排序,并进行了以下观察。 我使用的代码片段:
import builtins, sys, inspect
classes = [i for i in builtins.__dict__.values() if inspect.isclass(i)]
objects = []
for i in classes:
try:
objects.append((i, sys.getsizeof(i())))
except:
...
objects.sort(key=lambda x: x[1])
for i in objects[:10]:
print(i)
上面代码段的标准输出是:
(<class 'object'>, 16)
(<class 'bool'>, 24)
(<class 'float'>, 24)
(<class 'int'>, 24)
(<class 'complex'>, 32)
(<class 'bytes'>, 33)
(<class 'tuple'>, 40)
(<class '_frozen_importlib.BuiltinImporter'>, 48)
(<class 'str'>, 49)
(<class 'bytearray'>, 56)
这些是在我的机器上运行的 Python 3.9.2 上大小最小的 10 个对象。 根据 @martineau 的评论,每个对象的大小因不同的 python 版本和机器而异。
None
将是据我所知最小的可用对象,与系统架构、解释器、版本无关。