python 列表, 元组内存分配优化
1. 空元组与空列表
>>> a = ()
>>> b = ()
>>> a is b
True
>>> id(a)
4374097992
>>> id(b)
4374097992
>>> a = []
>>> b = []
>>> a is b
False
元组是不可变对象,空元组只存在一个,实在是没有必要每次都创建出一个空元组来,列表则不同,列表是可变对象,每次都会创建出一个新的空列表
2. 小元组的分配优化
为了减少内存碎片,加快分配速度,python会重用旧的元组,如果一个元组不再被使用且元组的长度小于20,那么python不会直接释放它,而是将它移动到一个列表中,这个列表被分为20组,每一组存储一系列长度在0到20之间的元组,每个组可以最多存储2000个元组。第一组只存储了一个元组,正是空元组。
>>> a = (1, 2, 3)
>>> id(a)
4377330024
>>> del a
>>> b = (1, 2, 4)
>>> id(b)
4377330024
元组a被del后,内存并不是真的被回收,它的这片内存空间可以