一丶对之前的知识点进行补充
1.str中的join方法,把列表转换成字符串
s = "**".join(["高华新", "刘清扬", "崔园樟"]) print(s)

1 ss = "高华新**刘清扬**崔园樟" 2 set = ss.split("**") 3 print(ss) 4 print(set)
2.列表和字典在循环的时候不能直接删除
(需要把要把删除的内容记录在新列表中,然后循环新列表,删除字典或者列表)

1 lst = ["紫云", "大云", "玉溪", "紫钻","a","b"] 2 # lst.clear() 3 new_lst = [] # 准备要删除的信息 4 for el in lst: # 有一个变量来记录当前循环的位置 5 new_lst.append(el) 6 7 # # 循环新列表, 删除老列表 8 for el in new_lst: 9 lst.remove(el) 10 # 11 # # 删除的时候, 发现. 剩余了一下内容. 原因是内部的索引在改变. 12 # # 需要把要删除的内容记录下来. 然后循环这个记录. 删除原来的列表 13 # 14 print(lst) 15 print(new_lst)

1 lst = ["张国荣", '张铁林', '张国立', "张曼玉", "汪峰"] 2 # 删掉姓张的 3 # 记录姓张的. 4 zhangs = [] 5 for el in lst: 6 if el.startswith("张"): 7 zhangs.append(el) 8 for el in zhangs: 9 lst.remove(el) 10 print(lst) 11 print(zhangs)
3.fromkeys()
1.返回新字典,对原字典没有影响
2.后面的value.是多个key共享一个value

1 dic = {"apple":"苹果", "banana":"香蕉"} 2 # 返回新字典. 和原来的没关系 3 ret = dic.fromkeys("orange", "橘子") # 直接用字典去访问fromkeys不会对字典产生影响 4 ret = dict.fromkeys("abc",["哈哈","呵呵", "吼吼"]) # fromkeys直接使用类名进行访问 5 print(ret) 6 a = ["哈哈","呵呵", "吼吼"] 7 ret = dict.fromkeys("abc", a) # fromkeys直接使用类名进行访问 8 a.append("嘻嘻") 9 print(ret)
二丶set集合
set集合是python的一个基本数据类型,一般不是很常用,set元素是不可重复的,无须的,里面的元素必须是可hash的(int set tuple bool) 我们可以这样来记,set就是dict类型的数据,但是不保存value,只保存key set 也可以用{}来表示
注意:set集合中的元素必须是课hash的,但是本身是不可hash得,set是可变的,不重复的可以用来去重复.

1 s = {"周杰伦", "的老婆","叫昆凌", (1,2,3), "周杰伦"} 2 lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5] 3 s = set(lst) # 把列表转换成集合. 进行去重复 4 lst = list(s) # 把集合转换回列表. 5 print(lst)

1 s = {"刘嘉玲", '关之琳', "王祖贤"} 2 s.update("麻花藤") # 迭代更新 3 print(s)
set集合的增删改查:
1.增加
2.删除
3.修改
4.查询
5.常用操作
set集合本⾝是可以发⽣改变的. 是不可hash的. 我们可以使⽤frozenset来保存数据.
frozenset是不可变的. 也就是⼀个可哈希的数据类型
ps 这个不是很常用,了解一下
三丶深浅拷贝(重点)
1. 赋值. 没有创建新对象. 公用同一个对象
2. 浅拷贝. 拷贝第一层内容. [:]或copy()
3. 深拷贝. 拷贝所有内容. 包括内部的所有
1 # 引入copy模块 2 import copy 3 4 lst1 = ["金毛狮王", "紫衫龙王", "青翼蝠王", "白眉鹰王",["张无忌","赵敏","周芷若"]] 5 # lst2 = lst1[:] # 浅拷贝 6 # lst2 = lst1.copy() # 浅拷贝 7 lst2 = copy.deepcopy(lst1) 8 9 # lst1[4].append("小昭") 10 11 print(lst1) 12 print(lst2) 13 14 print(id(lst1[4])) 15 print(id(lst2[4])) 16 17 # 1. 赋值操作. 没有创建新对象 18 # 2. 浅拷贝. 只拷贝第一层内容. [:] copy() 19 # 3. 深拷贝. 把这个对象内部的内容全部拷贝一份. 引入copy模块. deepcopy()
浅拷贝,只会拷贝第一层,第二层的内容不会拷贝,所以被称为浅拷贝
深度拷贝,把元素内部进行拷贝,复制,不会产生一个改变另一个跟着改变的问题