Two bytes snowman return 76 bytes per sys.getsizeof()
本问题已经有最佳答案,请猛点这里访问。
我查了雪人的Unicode码
1 2 3 | In [37]: snowman ="\u2603" In [38]: snowman Out[38]: '?' |
如上所述,"?"占用2个字节
但是,当我试图得到它的尺寸时:
1 2 | In [39]: sys.getsizeof(snowman) Out[39]: 76 |
号
表示雪人取76字节
关于内置函数getsizeof in module sys的帮助:
1 2 3 4 | getsizeof(...) getsizeof(object, default) -> int Return the size of object in bytes. |
我怎么能理解?
首先,Python是一种动态类型语言,所有对象都携带类型信息。在C语言中,int只需要字节来表示int;它是int的知识在代码中是隐式的。在python中不是这样,在数字中不是这样,尤其是在字符串中,自从pep 393被采用以来,字符串变得更加复杂。如您所见,无论是在PEP中还是在这里的cpython源代码中,python都可以用几个表示中的一个表示字符串。不幸的是,头信息相当大;字符串不仅具有每个python对象所具有的头,而且还具有标志结构,它在具有更多层的洋葱状结构中携带散列、字节长度、真实长度等等,表示形式越复杂。因此,仅限ASCII的字符串比较短(