sys.getsizeof
在不同版本的python上返回不同大小的unicode字符串。
sys.getsizeof(u'Hello World')
在96
上返回Python 2.7.3
并在72
上返回Python 2.7.11
答案 0 :(得分:3)
sys.getsizeof
按定义为您提供实现细节,并且不保证这些细节在版本甚至构建之间保持稳定。
尽管如此,2.7.3和2.7.11之间的任何重大变化都不太可能;你对角色宽度的评论可能解释了这种差异;包括内部存储的NUL终结符,Hello World
中有12个字符,UCS4编码需要比UCS2编码多24个字节来存储它们(但作为交换,它可以处理非BMP个字符)。
其他可能改变大小的事情(在其他情况下)将是32比64位构建(所有指针和ssize_t
在64位构建上的大小加倍,非long
s -Windows机器),Python 2与Python 3(Python 3从公共对象头中删除单个指针宽度字段),对于str
,Python 3.2(使用构建选项指定固定宽度UCS2或UCS4 {{ 1}},与Py2 str
)相对于Python 3.3+(uses one of three different fixed widths depending on the largest ordinal in the str
,因此ASCII / latin-1 unicode
每个字符使用一个字节,BMP {{1} }使用两个,而非BMP str
使用四个,但也可以缓存替代表示,因此相同的str
可以根据使用情况增长或缩小"真实"大小
答案 1 :(得分:0)
sys.getsizeof 在不同的计算机上可能会有所不同。但是我认为这可以解决您的问题。以一个字符串的大小为例,减去一个空字符串的大小。
import sys
def get_size_of_string(s):
return sys.getsizeof(s)-sys.getsizeof("")
a=get_size_of_string("abc")
print (a)