问题引出
import sys
name = ["alpha", "beta", "gamma"]
age = [10, 20, 30]
size1 = sys.getsizeof(name) + sys.getsizeof(name)
print(size1)
stu = {"alpha":10, "beta":20, "gamma":30 }
size2 = sys.getsizeof(stu)
print(size2)
运行结果:
176
240
list数据结构
list的实现是一个可扩展的顺序表,表里除了表头+分配的slot的个数(固定大小)之外,还存在一个数组,数组元素是指针。
如下图所示:
因此,我们先创建一个空的list,可获取固定部分的大小。
import sys
l = []
print(sys.getsizeof(l))
64
l.append(10)
print(sys.getsizeof(l))
96
可见,list的固定部分大小为64
此时:slot的个数为0,当append一个元素时,按照resize规则(0,4,8,16,25,35,46,58,72,88……),此时有四个slot,而一个指针占有8字节。因而此时大小变为64+4*8 = 96
那么,为什么最前面例子中name+age大小为176呢?
我们可以发现:name和age都是一开始初始化时就确定三个元素,因此一开始就有3个slot。