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

时间:2016-03-22 10:52:16

标签: python python-unicode

sys.getsizeof在不同版本的python上返回不同大小的unicode字符串。

sys.getsizeof(u'Hello World')96上返回Python 2.7.3并在72上返回Python 2.7.11

2 个答案:

答案 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)