03 | python中 列表和元组的差异

2020-02-29  本文已影响0人  _咚咚咚东

功能差异

列表是动态的,可拓展的。
元组是静态的,不可拓展的。对元组的增删操作只能通过新建一个元组进行操作。

底层实现的差异

l = []
l.__sizeof__() // 空列表的存储空间为40字节
40
l.append(1)
l.__sizeof__() 
72 // 加入了元素1之后,列表为其分配了可以存储4个元素的空间 (72 - 40)/8 = 4
l.append(2) 
l.__sizeof__()
72 // 由于之前分配了空间,所以加入元素2,列表空间不变
l.append(3)
l.__sizeof__() 
72 // 同上
l.append(4)
l.__sizeof__() 
72 // 同上
l.append(5)
l.__sizeof__() 
104 // 加入元素5之后,列表的空间不足,所以又额外分配了可以存储4个元素的空间
t = tuple()
t.__sizeof__()
24

空的列表比空的元组空间大16字节,是因为,列表需要指针指向元素(8字节),记录已分配的空间大小(8字节)。
(满的列表也是比同样的元组多16字节。)

性能差异

python3 -m timeit 'x=(1,2,3,4,5,6)'
20000000 loops, best of 5: 9.97 nsec per loop
python3 -m timeit 'x=[1,2,3,4,5,6]'
5000000 loops, best of 5: 50.1 nsec per loop

使用场景差异


a=[] #性能更优
a=list()

因为list()涉及到函数调用,会创建stack,并且进行一系列参数检查的操作。
而 [] 是一个内置的C函数,可以被直接调用。

上一篇 下一篇

猜你喜欢

热点阅读