不可变性:在核心类型中,数字、字符串和元组是不可变的;列表和字典是可变的。在其他方面,这种不可变性可以用来保证在程序中保持一个对象固定不变。
字符串replace方法会对全局进行搜索和替换,但是不会改变原始的字符串,而是会创建一个新的字符串作为结果【字符串的不可变性】
字典是一种映射(mapping),是一个其他对象的集合,但是通过键而不是通过相对位置来存粗的,它没有任何可靠的从左到右的顺序,只是简单的将键映射到值,是python核心对象集合中的唯一一种映射类型,具有可变性【可以就地改变,并可以随需求增大或减小】
字典索引操作与序列语法相同,但索引元素是键而不是相对位置
在python中,当最后一次引用对象后,这个对象所占用的内存空间将会自动清理掉:python具有一种叫垃圾收集的特性,在程序运行时可以清理不再使用的内存。
列表
列表是python中最具灵活性的有序集合对象类型,与字符串不同的是,列表可以包含任何种类的对象:数字、字符串和其他列表;同时列表都是可变对象,支持在原处修改的操作,可以通过指定的偏移值和、分片、列表方法调用、删除语句等方法来实现。属性:
任意对象的有序集合
功能上-收集其他对象,可看作数组;每一项都保持了从左到右的位置顺序【序列】
通过偏移读取
像字符串一样,可以通过列表对象的相对位置对其进行索引,由于其每一项都是有序的,也可以执行分片和合并之类的任务
可变长度、异构以及任意嵌套
可以实地增长或缩短【可变长度】,可以包含任何类型的对象【异构】,可以创建列表的子列表的子列表【任意嵌套】
属于可变序列的分类
支持在原处的修改,也可以响应所有针对字符串序列的操作【索引、分片、合并】当应用于字符串上的合并、分片等操作时返回新的列表【可变】,支持字符串不支持的其他操作【删除、索引赋值操作,原处修改列表】
对象引用数组
python列表包含了零个或多个其他对象的引用,在标准python解释器内部,列表就是C数组而不是链接结构。每当用到引用时,python总是会将这个引用指向一个对象,所以程序只需处理对象的操作,当把一个对象赋给一个数据结构元素或变量名时python总是会存储对象的引用,而不是对象的一个拷贝。
字典
如果列表是有序的对象集合,那么字典就是无序的集合。字典当中的元素是通过键来存取,而不是通过相对位置来存取的。对字典进行索引是非常快速的搜索操作。属性:
通过键而不是偏移量【相对位移】来读取
字典有时又叫做关联数组、散列表(hash)是通过键将一系列值联系起来
任意对象的无序集合
保存在字典中的项没有特定的顺序【随机排序】,以便快速查找,键提供了字典中项的象征性位置
可变长、异构、任意嵌套
可在原处增长或缩短【无需生成拷贝】,可包含任意类型的对象,支持任意深度的嵌套【可包含列表和字典】
属于可变映射类型
通过给索引赋值,字典可以在原处修改【可变】,但不支持字符串和列表中的序列操作【字典是无序集合,不支持合并、分片操作】。字典是唯一内置的映射类型
对象引用表【散列表】
如果说列表是支持位置读取的对象引用数组,那么字典就是支持键读取的无序对象引用表,其本质是作为散列表来实现的【支持快速检索的数据结构】,一开始很小,根据要求增长。Python采用最优化的散列算法来寻找键,搜索快速。和列表一样,字典存储的是对象引用【不是拷贝】