#集合的建立 # set = set(["barry",1,2]) # print(set) # set1 = {1,2,3} #集合的增 # set1 = {'alex','wusir','ritian','egon','barry'} # set1.add("taibai") # # set1.update("taibai") #迭代追加 # print(set1) # 刪 # set1 = {'alex','wusir','ritian','egon','barry'} # # set1.pop() #隨機刪 # # set1.remove("alex") #指定元素刪 # # set1.clear() #清空集合 # del set1 #刪除集合 # print(set1) #交集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 & set2) # {4, 5} # print(set1.intersection(set2)) # {4, 5} #並集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7} # print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7} #差集 # set1 = {1,2,3,4,5} # set2 = {4,5,6,7,8} # print(set1 - set2) # {1, 2, 3} # print(set1.difference(set2)) # {1, 2, 3} #反差集 # 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} #子集 是判斷返回True或者False # ) # 這兩個相同,都是說明set2是set1超集set1 = {1,2,3} # # set2 = {1,2,3,4,5,6} # # print(set1 < set2) # # print(set1.issubset(set2)) # 這兩個相同,都是說明set1是set2子集。 # # print(set2 > set1) # # print(set2.issuperset(set1) #集合屬於可變的類型,集合裏面的元素屬於不可變類型 #frozenset 將集合凍結,使其成爲不可變類型 # s = frozenset("barry") # print(s,type(s))
集合要求裏面的元素必須是不可變的數據類型,即int,字符串,bool。可是集合自己屬於可變的數據類型面試
集合裏面的元素是不重複的(因此具備自然去重的特色),集合是無序的app
主要做用是:測試
1.去重 (面試題:將list去重)spa
l1 = [1,1,2,1,3,4,5,6,4,2,"alex","alex"]code
作法: set1 = set(l1)blog
l2 = list(set1)內存
print(l2) #結果爲[1,2,3,4,5,6,"alex"]rem
2.關係測試,字符串
交集 & intersectionit
並集 | union
反交集 ^ difference
子集 < issubset 判斷,a,b爲倆個集合,若是是True,則說明a 是b的子集
超集 > issuperset 若是是False,則說明a是b的超集
增 add update
刪 pop remove clear(清空) del (刪除集合)
將集合變成不可變的數據類型即 frozenset() 凍結
# s = frozenset("barry") # print(s,type(s)) #frozenset({'y', 'b', 'a', 'r'}) <class 'frozenset'>
1賦值運算
l1 = [1,2,3] l2 = l1 l1.append(666) print(l1) print(l2) print(id(l1),id(l2))
#[1, 2, 3, 666]
[1, 2, 3, 666]
2494346240904
2494346240904
對於賦值運算來講,l1與l2指向的是同一個內存地址,因此他們是徹底同樣的。 即l1 is l2 爲True
2.淺copy
對於淺copy來講,第一層建立的是新的內存地址,而從第二層開始,指向的都是同一個內存地址,因此,對於第二層以及更深的層數來講,保持一致性。
3.deepcopy 深拷貝
對於深copy來講,兩個是徹底獨立的,改變任意一個的任何元素(不管多少層),另外一個絕對不改變。
面試題(切片屬於淺copy)
l1 = [1,2,3,[22,33]] l2 = l1[:] # l1.append(666) l1[-1].append(666) print(l1,l2) #[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]]