import sys
m=u"ab"
k=b"ab"
l="ab"
print(m,type(m),sys.getsizeof(m),"|",k,type(k),sys.getsizeof(k),"|",l,type(l),sys.getsizeof(l))
ab <class 'str'> 51 | b'ab' <class 'bytes'> 35 | ab <class 'str'> 51
怎样计算出51,和35的数字的?
谢谢
import sys
a=456
b=0
print(sys.getsizeof(a),sys.getsizeof(b))
28 24
我记得int是一种类型,为什么一种类型的变量占内存的大小还不一样啊?
我以python3版本为例说明,
int
类型在python中是动态长度的。因为python3中int类型是长整型,理论支持无限大的数字,但它的结构其实也很简单, 在longintepr.h
中定义:这结构是什么意思呢,重点在于
ob_digit
它是一个数组指针。digit
可认为是int
的别名。python的整型存储机制是这样的。比方要表示一个很大的数:123456789
。而每个元素最大只能表示3位十进制数(为理解打的比方)。那么python就会这样存储:低位存于低索引下。python中整型结构中的数组,每个元素最大存储
15
位的二进制数(不同位数操作系统有差异32位系统存15位,64位系统是30位)。因此,
sys.getsizeof(0)
数组元素为0。此时占用24字节(PyObject_VAR_HEAD
的大小)。sys.getsizeof(456)
需使用一个元素,因此多了4个字节。有兴趣可以看看整型对象的分析: https://www.hongweipeng.com/i...