set集合,深浅拷⻉以及部分知识点补充

一丶对之前的知识点进行补充

1.str中的join方法,把列表转换成字符串

s = "**".join(["高华新", "刘清扬", "崔园樟"])
print(s)
1 ss = "高华新**刘清扬**崔园樟"
2 set = ss.split("**")
3 print(ss)
4 print(set)
View Code

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)
View Code
 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)
View Code

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)
View Code

 二丶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()

 浅拷贝,只会拷贝第一层,第二层的内容不会拷贝,所以被称为浅拷贝

 深度拷贝,把元素内部进行拷贝,复制,不会产生一个改变另一个跟着改变的问题

原文地址:https://www.cnblogs.com/xintiao-/p/9414519.html