1. 基本对象类型(python里面一切皆是对象)
(接前文)
1.6 元组
不可变的列表被称为元组,区别是用小括号包含。元组的元素不能修改,但可以对整个元组进行重新赋值。
元组也是序列,因此对元组的遍历、读取某个元素、切片等操作,和列表、和字符串相同。
特别提醒:若元组中只有一个元素时,元素后面需要加一个半角的英文逗号。
示例:
>>> a = (3) #没有逗号
>>> type(a) #输出<class 'int'>,不是tuple类型
>>> a = (3,) #元组
>>> type(a) #输出<class 'tuple'>,是tuple类型
1.7 字典
1.7.1 字典定义
字典是一系列键值对。每个键都与一个值相关联,可以使用键来访问与之相关联的值。键和值之间用冒号分隔,而键值对之间用逗号分隔。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。
字典用放在花括号{} 中的一系列键值对表示。
键必须是唯一的,不允许重复的键。值可以重复。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组,可变类型如列表不可以作为键。示例:
>>> d = {1:'a',2:'b',(3,4):'c'} #有效的字典定义,元组可以作为键
>>> d = {1:'a',2:'b',[3,4]:'c'} #错误的字典定义,列表不能作为键
字典是一种动态结构,可随时在其中添加键值对。
字典中各个键值对无次序关系。
1.7.2 访问及修改字典
1.7.2.1 访问字典中的值
要获取与键相关联的值,可指定字典名和放在方括号内的键。示例:
>>>d1 = {'name': 'xiaoming', 'age': 15}
>>>d1['age'] #输出15
>>>d1['sex'] #系统抛出异常,可以采用get()方法。
1.7.2.2 添加键值对
要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值。示例:
>>> d1['hobby']=['swiming','reading','football']
>>> d1 输出:{'name': 'xiaoming', 'age': 15, 'hobby': ['swiming', 'reading', 'football']}
1.7.2.3 修改字典中的值
与新增键值对格式相同。示例:
>>> d1['hobby']=['swiming','reading'] #修改键'hobby'对应的值,原来为 ['swiming', 'reading', 'football']}
>>> d1 #输出 {'name': 'xiaoming', 'age': 15, 'hobby': ['swiming', 'reading']}
1.7.2.4 删除键值对
使用del 语句指定字典名和要删除的键,将相应的键—值对彻底删除。示例:
>>> del d1['age'] #删除键为'age'的键值对
>>> d1 #输出{'name': 'xiaoming', 'hobby': ['swiming', 'reading']}
>>> del d1 #删除字典
1.7.3 字典复制三种方式 (赋值引用、copy、deepcopy)
1) 赋值引用
>>> dict1 = {'Name': 'xiaoming', 'Age': 7, 'Class': 'First'}
>>> dict2 = dict1 #赋值引用,数据只有一份
>>> id(dict1) #存放数据的内存地址50401344
>>> id(dict2) #内存地址 50401344未变,指向同一份数据
2) copy(浅拷贝)
二份数据。对简单数据类型的元素会复制数据,复杂数据类型的元素只复制地址引用。
语法、使用方式已经功能与列表的copy相同。示例:
>>> dict1 = {'Name': 'xiaoming', 'Age': 7, 'Class': 'First'}
>>> dict2 = dict1.copy()
3) deepcopy(深拷贝)
使用方法与列表的深拷贝相同。
复制所有数据,包括简单数据类型元素和复杂数据类型元素。使用方法与列表的深拷贝相同。示例:
>>> dict2 = copy.deepcopy(dict1)