序列
序列是一种数据存储方式,用来存储一系列的数据,在内存中,序列就是一块用来存放多个值的连续的内存空间
类型:字符串 ,列表 ,元祖 ,字典,集合
一个整数序列如下表示:
由于python3中一切皆对象,在内存中实际是按照如下方式存储的:
a = [10,20,30,40]
从图示中:
可以看出序列中存储的是整数对象的地址,而不是整数对象的值
列表
列表用于存储任意数目,任意类型的数据集合
列表是内置可变序列,是包含多个元素的有序连续的内存空间
a = [10,20,30,40] 10,20,30,40是列表a的元素
列表常用方法:
列表的大小可变,可根据需要增加或减小
列表创建
基本语法[]创建
a = [10,20,'li','abc']
list()创建 使用list可以将任何迭代的数据转化成列表
a = list() # 创建一个空的列表对象
a = list(range(10))
range()创建整数列
推导式生成列表
列表元素的增加和删除
append()方法 原地修改列表对象,是真正的列表尾部添加新的元素
+运算符操作 并不是真正的尾部添加元素而是创建新的列表对象,将原列表和新列表的元素依次复制到新的列表对象中
extend()方法 将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的对象
insert()插入元素 可以将指定的元素插入到列表对象的任意指定位置
乘法扩展
字典
字典是"键值对"的无序可变序列
字典创建
字典元素的访问
字典元素添加,修改,删除
字典序列解包
序列解包可用于元组,字典,列表,用于字典时,默认是对"键"操作,键值操作使用items(),值操作使用values()
字典核心底层原理
字典对象的核心是散列表,是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket,每个bucket有两部分:键对象的引用,值对象的引用
由于所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket
用法总结:
键必须可散列 数字,字符串,元组都是可散列的
自定义对象需要支持以下几点:支持hash()函数 支持通过__eq__()方法检测相等性 若a==b为真,则hash(a)==hash(b)也为真
字典在内存中开销巨大,典型的空间换时间
键查询速度很快
往字典里面添加新键可能导致扩容,导致散列表中键的次序变化,因此不要在遍历字典的同时进行字典的修改
集合
集合是无序可变,元素不能重复,集合底层是字典实现,集合所有元素都是字典中的"键对象"因此是不能重复且唯一的
集合创建和删除