【发布时间】:2017-06-05 01:34:49
【问题描述】:
我的理解是 os.urandom(size) 输出给定“大小”的随机字节串,但是:
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 与十六进制),因此不相等。您通常可以通过获取
getsizeof()的结果并减去每个对象的len()来计算每个对象使用了多少内存,因此在您的情况下,每个对象都添加了 33 个额外的字节。
标签: python python-3.x memory encoding base64