一、集合
集合是无序的,不重复的数据集合,它里面的元素是可哈希(不可变类型),但是集合本身是不可哈希,(所以集合做不了字典的键)
集合最重要的2点: 去重:把一个列表变成集合,就自动去重了。
关系测试: 测试两组数据之间的交集、并集、差集等关系
1.1创建set():
1 set = set({ }) 2 set = { }
1.2增
1 add.() 2 set = { } 3 set.add(self, element) 4 #set.add('kitty') 5 6 update(self, iterable) 迭代添加 7 set.update() 8 #set = {1,'d'} 9 #set.update('龟叔') 10 #print(set) 11 #{1, '龟', 'd', '叔'}
1.3删
1 pop(self) 随机删1个element 2 remove(self, element) 指定删1个element 3 clear(self) 清空set() 4 del set 删集合本身 返回<class 'set'>
集合交集、并集、差集、反交集、子集、超集:
1 set1 = {1,2,3,4} 2 set2 = {3,4,5,6} 3 交集: 3,4 set1 & set2 set1.intersection(set2) 4 反交集:1,2,5,6 set1 ^ set2 set1.symmetric_difference(set2) 5 并集:1,2,3,4,5,6 set1 | set2 set1.union(set2) 6 差集 : 7 set1 - set2 是 1,2 set1 - set2 set1.difference(set2) 8 set2 - set1 是 3,4 ***----*** ****------------**** 9 10 set1 = {1,2,3] 11 set2 = {1,2,3,4,5,6] 12 子集: 13 set1 < set2 set1.issubset(set2) 返回True or False 14 超集: 15 set2 > set1 set2.issuperset(set1) 返回True or False
不可变集合:(把集合变成可哈西的)
1 set = frozenset(iteralbe) 迭代创建set() 2 set = frozenset('abc') 3 print(type(set)) 4 #frozenset({'b', 'c', 'a'}) 5 #<class 'frozenset'>
二、深浅copy
2.1浅copy:
2.1.1赋值运算: (对于不可哈希类型:list dict set() )
1 dic1 = {'name':'kitty','age':18} 2 dic2 = dic1 对于不可哈希类型,dic1 dic2 都是指向同一地址,同步改变 3 dic1['name'] = 'cat' 4 print(dic1) 5 print(dic2) 6 #{'name': 'cat', 'age': 18} 7 #{'name': 'cat', 'age': 18}
2.1.2 copy():
1 [深copy] 2 dic1 = {'name':'kitty','age':18} 3 dic2 = dic1.copy() 4 dic1['name'] = 'cat' 5 print(dic1) 6 print(dic2) 7 {'name': 'cat', 'age': 18} 8 {'name': 'kitty', 'age': 18} 9 ---------- 10 ########################## 11 -------[深copy,[浅copy] ]----------如果 copy(self) 对于不可哈希类型 list dict set() 如果内部有嵌套 内部是浅copy 12 dic1 = {'name':['kitty','cat'],'age':18} 13 dic2 = dic1.copy() 14 dic1['name'][1] = 'dog' 15 print(dic1) 16 print(dic2) 17 {'name': ['kitty', 'dog'], 'age': 18} 18 {'name': ['kitty', 'dog'], 'age': 18} 内部嵌套的list 仍然指向同一地址 19 20 dic1 = {'name':{'class':'student'},'age':18} 21 dic2 = dic1.copy() 22 dic1['name']['class'] = 'teacher' 23 print(dic1) 24 print(dic2) 25 {'name': {'class': 'teacher'}, 'age': 18} 内部嵌套的dict 仍然指向同一地址 26 {'name': {'class': 'teacher'}, 'age': 18} 27 28 多层嵌套,第一层创建的是新的内存地址,从第二层开始,指向的都是同一内存地址,二层往下,同时更新变化
2.2 深拷贝deepcopy()
1 import copy 2 copy.deepcopy() 3 import copy 4 dic1 = {'name':['kitty','cat'],'age':18} 5 dic2 = copy.deepcopy(dic1) 6 dic1['name'][1] = 'dog' 7 print(dic1) 8 print(dic2) 9 {'name': ['kitty', 'dog'], 'age': 18} 10 {'name': ['kitty', 'cat'], 'age': 18} 11 对于deepcopy()来说,两个是完全独立的,不管嵌套多少层,都 不会 发生同步更新变化。