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_t
s 在 64 位版本上的大小加倍,long
s 也是如此在非 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)
sys.getsizeof
在 python.
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_t
s 在 64 位版本上的大小加倍,long
s 也是如此在非 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)