python sys.getsizeof 方法在不同版本的 python 上返回不同的大小

python sys.getsizeof method returning different sizes on different versions of python

sys.getsizeof 在 python.

的不同版本上 return Unicode 字符串的大小不同

sys.getsizeof(u'Hello World') return 96 Python 2.7.3 和 returns 72 Python 2.7.11

sys.getsizeof 根据定义为您提供实施细节,并且 none 这些细节保证在版本甚至构建之间保持稳定。

虽然 2.7.3 和 2.7.11 之间不太可能发生任何重大变化;您对字符宽度的评论可能解释了差异;包括内部存储的 NUL 终止符,Hello World 中有 12 个字符,UCS4 编码比 UCS2 编码需要多 24 个字节来存储它们(但作为交换,它可以处理非 BMP 字符)。

其他可能改变大小(在其他情况下)的东西是 32 位和 64 位版本(所有指针和 ssize_ts 在 64 位版本上的大小加倍,longs 也是如此在非 Windows 机器上),Python 2 与 Python 3(Python 3 从公共对象头中删除了单个指针宽度字段),以及 str, Python 3.2(使用构建选项指定固定宽度 UCS2 或 UCS4 str,与 Py2 unicode 相同)与 Python 3.3+(uses one of three different fixed widths depending on the largest ordinal in the str,因此 ASCII/latin-1 str 每个字符使用一个字节,BMP str 使用两个,非 BMP str 使用四个,但也可以缓存替代表示,因此相同的 str 可以根据使用情况增大或缩小 "real" 大小。

sys.getsizeof Can differ on different computers. However I think this can solve your issues. Take the size of a string for example and subtract the size of an empty string.

import sys def get_size_of_string(s): return sys.getsizeof(s)-sys.getsizeof("") a=get_size_of_string("abc") print (a)