集合与深浅拷贝
一、集合
1.定义
元素的集,同一集合下,元素不相同。集合有交集并集等操作。集合是可变的数据类型,但是集合内的元素必须是不可变的。
set1={1,2,3,4} #集合内元素不重复 set2={(1,2),(3,2),('1','2','3')} #集合内元素不可变 set3=set1 #集合的定义可以用直接赋值 print(set1) print(set2) print(set3) #打印: # {1, 2, 3, 4} # {(1, 2), (3, 2), ('1', '2', '3')} # {1, 2, 3, 4}
2.操作
set1.add("12") #增加有add和update print(set1) set2.update((4,7)) print(set2) #打印 # {1, 2, 3, 4, '12'} # {(1, 2), ('1', '2', '3'), (3, 2), 4, 7}
print(set1.pop() ) #随机删除一个元素,有返回值 print(set1) set2.remove((1,2)) #删除指定元素 print(set2) set3.clear() #使成为空集 print(set3,type(set3)) del set3 #删除集合 #打印 # 1 # {2, 3, 4, '12'} # {(3, 2), 4, 7, ('1', '2', '3')} # set() <class 'set'>
#查 for i in set1: print(i) #集合内元素也可以迭代,所以可以用for循环打印
#求交集 set1.add((3,2)) set4=set1 & set2 print(set4) set5=set1.intersection(set2) print(set5) # 打印 # {(3, 2)} # {(3, 2)}
#求并集 set6=set1.union(set2) print(set6) #{(3, 2), 4, 7, ('1', '2', '3')}
#求并集 set6=set1.union(set2) print(set6) #{(3, 2), 4, 7, ('1', '2', '3')} set7=set1 | set2 print(set7) #{(3, 2), 4, 7, ('1', '2', '3')}
#求并集-交集(补集) set8={1,2,3,4,5,7,6} set9={5,6,7,10,11,12} set10=set8 ^ set9 print(set10) set11=set8.symmetric_difference(set9) print(set11) # {1, 2, 3, 4, 10, 11, 12} # {1, 2, 3, 4, 10, 11, 12}
#求一个集合-交集 set12=set8-set9 print(set12) set13=set8.difference(set9) print(set13) # {1, 2, 3, 4} # {1, 2, 3, 4} #集合不可以加,但是可以减
#判断一个集合是否是另一个集合的子集或超集 print(set8 < set9) print(set10 < set8) print(set12 < set8) print(set8 > set13) a=set8.issuperset(set12) b=set8.issubset(set12) c=set13.issuperset(set9) d=set13.issubset(set9) print(a) print(b) print(c) print(d) # False # False # True # True # True # False # False # False
#利用集合的性质去重 li=[1,1,2,3,4,4,5,6,7,7] print(li,type(li)) se=set(li) print(se,type(se)) li=list(se) print(li,type(li)) # [1, 1, 2, 3, 4, 4, 5, 6, 7, 7] <class 'list'> # {1, 2, 3, 4, 5, 6, 7} <class 'set'> # [1, 2, 3, 4, 5, 6, 7] <class 'list'>
二、深拷贝与浅拷贝
#浅拷贝,只拷贝地址,样本变了,拷贝内容也变了 listm=[1,2,3,4,5,6,6] listx=listm print(listx) listm.append(9) print(listm) print(listx)
#深拷贝,拷贝内容,样本变了不影响拷贝内容 #但要记住import copy,才能调用深拷贝方法 import copy listy=copy.deepcopy(listm) listm.append(10) print(listm) print(listy)
#结果 # [1, 2, 3, 4, 5, 6, 6] # [1, 2, 3, 4, 5, 6, 6, 9] # [1, 2, 3, 4, 5, 6, 6, 9] # [1, 2, 3, 4, 5, 6, 6, 9, 10] # [1, 2, 3, 4, 5, 6, 6, 9]