浅拷贝

函数:变量 = 被复制的变量.copy() 浅拷贝只拷贝一层数据,当使用浅拷贝修改二层数据时,源数据也会被修改

深拷贝

函数:变量.copy.deepcopy(被复制的变量) 使用深拷贝时,修改任何层次的数值,原数据都不会别修改

集合

创建集合

可变集合

函数:set()

1.集合里面的项,必须是不可变的数据类型
2.当集合里面有重复项时,集合会自动保留一个.
3.里面的元素是无序的
4.可以添加删除元素
5.此数据类型是可变的

list = [1, 2, 1, 4, 5, 4, 2, ]
print(set(list))

>>>{1, 2, 4, 5}
不可变集合

函数:frozenset 和可变集合一样,只是不能变化而已



读取集合

由于集合本身是无序的,所以不能为集合创建索引或切片操作
只能循环遍历或使用in、not in来访问或判断集合元素。



添加元素

函数:集合.add(添加的元素) 把添加的元素整体加到集合中

list = [1, 2, 3, ]
a = set(list)
a.add("123")
print(a)

>>>{1, 2, 3, '123'}

函数:集合.update(添加的元素) 把添加的元素拆分成单个元素添家到整体中

list = [1, 2, 3, ]
a = set(list)
a.update("123")
print(a)

>>>{1, 2, 3, '1', '2', '3'}

当有重复的时,指添加一个

list = [1, 2, 3, ]
a = set(list)
a.update("11111")
print(a)

>>>{1, 2, 3, '1'}

当想添加一整个字符串的时候

list = [1, 2, 3, ]
a = set(list)
a.update([12, "11111"])
print(a)

>>>{1, 2, 3, 12, '11111'}



删除元素

函数:集合.remove(删除的元素) 把指定的元素在集合中删除


函数:pop() 随机删除一个元素


函数:集合.clear() 作用:清空集合



集合关系测试

判断元素是否包含某元素

使用in ,not in

list = [1, 2, 3, ]
a = set(list)
print(1 in a)       #1 在 a 中     正确
print(4 in a)       #4 在 a 中     错误
print(1 not in a)   #1 不在 a 中   错误
print(4 not in a)   #4 不在 a 中   正确

>>>True
False
False
True



判断集合是否相等

使用判断符:== , !=

print(set("1231321121212") == set("123"))
#因为集合的特性是去掉重复,所以两个相等

>>>True



并集 | union

把两边所有的元素全部取出,去掉重复

使用 " | "

s1 = set("123456")
s2 = set("456789")
print(s1 | s2)

>>>{'1', '4', '9', '8', '6', '2', '3', '7', '5'}

使用函数:`集合.union(集合)

s1 = set("123456")
s2 = set("456789")
print(s1.union(s2))

>>>{'7', '1', '6', '9', '8', '4', '3', '2', '5'}



交集 &

把两边共有的元素全部取出,去掉重复

使用函数:`集合.intersection(集合)

s1 = set("123456")
s2 = set("456789")
print(s1.intersection(s2))

>>>{'6', '5', '4'}

使用"&",交集

s1 = set("123456")
s2 = set("456789")
print(s1 & s2)

>>>{'6', '5', '4'}



反向交集,把两个集合交集以外的元素取出

s1 = set("123456")
s2 = set("456789")
print(s1.symmetric_difference(s2))

>>>{'3', '8', '7', '1', '9', '2'}

使用"^",反向交集

s1 = set("123456")
s2 = set("456789")
print(s1 ^ s2)

>>>{'1', '7', '3', '8', '2', '9'}



差集 - difference

取出前面集合里面有而后面集合里面没有的元素

使用函数:`集合.difference(集合)

s1 = set("123456")
s2 = set("456789")
print(s1.difference(s2))

>>>{'3', '1', '2'}

使用"-" 减号

s1 = set("123456")
s2 = set("456789")
print(s1 - s2)

>>>{'2', '3', '1'}



父集 可以使用大于号表示

函数:集合.issuperset(集合) 当前面的集合完全包含后面的集合时,返回True.反之,返回False

>>>print(set("123456").issuperset(set("123")))
True

>>>print(set("123456").issuperset(set("123456")))
True

>>>print(set("123456").issuperset(set("12367")))
False
子集 可以使用小于号表示

函数:集合.issubset(集合) 当后面的集合完全包含前面的集合时,返回True.反之,返回False
例子和父集相反

print(set("123").issubset(set("123456")))
>>>True