集合与深浅拷贝

时间:2021-06-18 19:51:16

一、集合

  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]