集合set() 和 深浅copy

一、集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希(不可变类型),但是集合本身是不可哈希,(所以集合做不了字典的键)

集合最重要的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()来说,两个是完全独立的,不管嵌套多少层,都 不会 发生同步更新变化。

 

posted @ 2017-10-28 16:21  静静别跑  阅读(223)  评论(0编辑  收藏  举报