7.推导式
推导式:就是一种能够快速生成数据的方式。
代码示例:想要快速生成由1~100内所有偶数数组成的列表
[xforx in range(1, 101) ifx % 2 == 0]
a = [x for x in range(4)][0, 1, 2, 3]a = [x for x in range(3, 19, 2)][3, 5, 7, 9, 11, 13, 15, 17]
a = {x for x inrange(1, 21) if x % 2 == 0}{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
{x: x ** 2for x inrange(1, 11)}{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
8.拆包
拆包:是一种快速提取数据的方式。
num1, num2, num3, num4 = (11, 22, 33, 44)
a, b = [12, 21]print(a)print(b)# 运行结果1221
a, b = (12, 21)print(a)print(b)# 运行结果1221
a, b = {12, 21}print(a)print(b)# 运行结果1221
info = {"name": "张三", "age": 18}for k, v in info.items(): print(f'输出:{k},{v}')# 运行结果输出:name,张三输出:age,18
9.深拷贝和浅拷贝
深拷贝:拷贝一个对象时,只要发现对象有可变类型就会对该对象到最后一个可变类型的每一层对象就行拷贝,对每一层拷贝的对象都会开辟新的内存空间进行存储。深拷贝需要使用copy模块下的copy()函数 举例: b = copy.deepcopy(a)import copylist1 = [["张三", "李四"], "王五", "赵六", "钱七"]list2 = copy.deepcopy(list1) # 进行深拷贝# 打印 list1 和 list2 两个列表的内存地址 => 结果不一样print(id(list1)) print(id(list2)) # 打印 list1 和 list2 两个列表中的子列表的内存地址 => 结果不一样print(id(list1[0])) print(id(list2[0])) list2[0][0] = "小明"# 结果 list2 列表修改了,但是不影响list1列表数据print(list2) # [['小明', '李四'], '王五', '赵六', '钱七']print(list1) # [['张三', '李四'], '王五', '赵六', '钱七']
浅拷贝只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,且不会拷贝对象内部的子对象。浅拷贝需要使用copy模块下的copy()函数,举例: b = copy.copy(a)list1 = [["张三", "李四"], "王五", "赵六", "钱七"]list2 = list1.copy() # 进行浅拷贝# 打印 list1 和 list2 两个列表的内存地址 => 结果不一样print(id(list1)) print(id(list2)) print('------------------------')# 打印 list1 和 list2 两个列表中的子列表的内存地址 => 结果一样print(id(list1[0])) print(id(list2[0])) list2[0][0] = "小明"# 结果list2列表修改了,list1列表数据也修改了print(list2) print(list1)