我的理解是,os.urandom(大小)输出给定的“大小”的字节的随机字符串,但随后:这个字节字符串实际占用多少内存?
import os
import sys
print(sys.getsizeof(os.urandom(42)))
>>>
75
这是为什么不是42?
和相关的问题:
import base64
import binascii
print(sys.getsizeof(base64.b64encode(os.urandom(42))))
print(sys.getsizeof(binascii.hexlify(os.urandom(42))))
>>>
89
117
为什么这些如此不同?哪种编码将是存储字节串的最高效内存方式,比如os.urandom给出的字节串?
编辑:这似乎有相当一段时间,说这个问题是What is the difference between len() and sys.getsizeof() methods in python?的重复我的问题不是关于len()和getsizeof()之间的区别。我一般都对Python对象使用的内存感到困惑,这个问题的答案已经为我澄清了。
在第二个例子中,生成的字符串长度不同(base64与hex),因此不相等。你通常可以通过getizeof()的结果并减去每个对象的len()来计算每个对象使用多少内存,因此在你的情况下每个对象都有33个额外的字节添加到它们中。 –