一、集合
1.set集合的介绍
集合是无序的,不可重复的数据集合,集合里面的每个元素必须是可哈希的(不可变的数据类型),但是集合是不可哈希的,所以集合做不了字典的键
集合的创建方式:
①:通过set()创建集合,格式 :集合名字=set(对象),该对象可以是任意的数据类型,但是对象里面的每个元素必须是不可变的数据类型,是可以hash的
②:通过{}创建
set1=set([1,2,3,4,5,6,7]) print(set1) #{1, 2, 3, 4, 5, 6, 7} set2=set('helloworld') print(set2) # {'r', 'h', 'w', 'd', 'l', 'o', 'e'} set3={1,2,3,4,5,6,7,8} print(set3) # {1, 2, 3, 4, 5, 6, 7, 8}
2、集合常用的方法
2.1 集合的增
set1=set({'jim','jordan','Spider Man'}) #第一种方式,通过add()添加元素 set1.add('Kong Fu Panda') print(set1) #{'Spider Man', 'Kong Fu Panda', 'jordan', 'jim'} #第二种方式,通过update()添加元素,如果添加的元素里面时可以迭代的元素,那么它就会将其迭代添加 set1.update('James') print(set1) #{'J', 'jim', 'Spider Man', 'e', 'jordan', 'm', 's', 'a', 'Kong Fu Panda'}
2.2 集合的删
set2=set({'jim','jordan','Spider Man','James','Jack'}) # 删除指定的元素,如果删除的元素不存在,则会报错 set2.remove('jordan') print(set2) #{'James', 'jim', 'Jack', 'Spider Man'} #随机删除集合的某一个元素 set2.pop() print(set2) #{'jim', 'Jack', 'Spider Man'} #删除集合 # del set2 print(set2) #NameError: name 'set2' is not defined 报错 #清空集合 set2.clear()
2.3集合的查
set3=set({'jim','jordan','Spider Man','James','Jack'}) for i in set3: print(i) #jordan James Spider Man jim Jack
3.集合的其它操作
3.1 交集。(& 或者 intersection)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) # {4, 5} print(set1.intersection(set2)) # {4, 5}
3.2 并集。(| 或者 union)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8} print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}
3.3 差集。(- 或者 difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set2 - set1) #{8, 6, 7} print(set1.difference(set2)) # {1, 2, 3} print(set2.difference(set1)) #{8, 6, 7}
3.4反交集。 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
3.5子集与超集
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) # True print(set1.issubset(set2)) # True 这两个相同,都是说明set1是set2子集。 print(set2 > set1) # True print(set2.issuperset(set1)) # True 这两个相同,都是说明set2是set1超集。
4,frozenset不可变集合,让集合变成不可变类型。
s = frozenset('James') print(s,type(s)) # frozenset({'e', 's', 'J', 'a', 'm'}) <class 'frozenset'>
二、深浅copy
1、赋值运算
对于赋值运算来说,list1与list2指向的是同一个内存地址,所以他们是完全一样的。
list1=['Jordan','James','Paul','Jeorage','Curry'] list2=list1 list1.append('Irving') print(list1) #['Jordan', 'James', 'Paul', 'Jeorage', 'Curry', 'Irving'] print(list2) # #['Jordan', 'James', 'Paul', 'Jeorage', 'Curry', 'Irving']
2、浅拷贝copy
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
l1 = [1,2,3,['hello','world']] l2 = l1.copy() print(l1,id(l1)) # [1, 2, 3, ['hello', 'world']] 1920725366664 print(l2,id(l2)) # [1, 2, 3, ['hello', 'world']] 1920726234696 l1[1] = 222 print(l1,id(l1)) #[1, 222, 3, ['hello', 'world']] 1920725366664 print(l2,id(l2)) # [1, 2, 3, ['hello', 'world']] 1920726234696 l1[3][0] = 'everybody' print(l1,id(l1[3])) # [1, 222, 3, ['everybody', 'world']] 1920726234824 print(l2,id(l2[3])) # [1, 2, 3, ['everybody', 'world']] 1920726234824
3、深拷贝deepcopy
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
import copy l1 = [1,2,3,['hello','world']] l2=copy.deepcopy(l1) print(l1,id(l1)) # [1, 2, 3, ['hello', 'world']] 2200548595592 print(l2,id(l2)) # [1, 2, 3, ['hello', 'world']] 2200548596424 l1[1] = 222 print(l1,id(l1)) #[1, 222, 3, ['hello', 'world']] 2200548595592 print(l2,id(l2)) # [1, 2, 3, ['hello', 'world']] 2200548596424 l1[3][0] = 'everybody' print(l1,id(l1[3])) # [1, 222, 3, ['everybody', 'world']] 2200548595400 print(l2,id(l2[3])) # [1, 2, 3, ['hello', 'world']] 2200548596360
来源:https://www.cnblogs.com/crazylover/p/9672833.html