一、列表和元组(可以放置任意数据类型的有序集合)
1.列表是动态的,长度大小不固定,可以增删改查:
list = [1,'a']
列表中增加数据:list.append('test')
列表中删除数据:del list[1]
列表中查询数据:list[0]
列表中修改数据:list[0] = 'aaaa'
2.元组是静态的,长度大小固定,不可增删改查
tump = ('a',1)
元组之间合并new_tump = tump+(5,)
3.列表和元组都支持负数索引:-1表示最后一个元素,-2表示倒数第二个元素 list[-1]
4.切片操作:list[1:3] 返回列表中的第2,3个元素;tump[1:3]返回数组中的第2,3个元素
5.列表和元组可以随意嵌套:[[1,2],[3,4]] ((1,2),(3,4))
6.列表通过tuple函数转换成元组:tuple([1,2,3]);元组通过list函数转换成列表:list((1,2,3))
7.常用内置函数
count(item):返回列表/元组中item元素出现的次数
index(item):返回列表/元组中item元素第一次出现的索引
list.reverse():原地倒转列表 /元组 例如list=[1,2,3,5,4] list.reverse() print(list) --->[4,5,3,2,1]
list.sort():对列表/元组进行排序 例如list=[1,2,3,5,4] list.sort()--->[1, 2, 3, 4, 5]
二、列表和元组存储方式
1.列表是动态的,需要存储指针,来指向对应的元素。由于列表可变,需要额外存储已经分配的长度大小,这样就可以实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。
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个元素的空间
2.元组的大小、长度是固定的。
三、列表和元组的性能:总体来说元组的性能优于列表
1.python后台对静态数据做了资源缓存(resource caching)。垃圾回收机制:如果一些变量不被使用,python会回收它们占用的内存,返还给操作系统,以便其他变量使用。
2.对于元组这类的静态变量,不被使用且占用空间不大,PYTHON会暂时缓存这部分内存,下次再创建同样大小的元组时,python可以不用再向操作系统发出请求,去寻找内存,而是可以直接分配之前缓存的内存空间,这样可以加宽程序的运行速度。