一、集合
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