python基礎—基本資料型別二(set 集合,深淺拷貝)
阿新 • • 發佈:2018-10-31
1、基礎資料型別彙總補充
str
int
list
bool
dict
tuple
2、集合 set {}
可變的資料型別,(不可雜湊)裡面的元素必須是不可變的資料型別,無序,不重複
以下是集合最重要的兩點:
去重,把一個列表變成集合,就自動去重了。
關係測試,測試兩組資料之前的交集、差集、並集等關係。
2.1 集合的建立
1 set1 = set ({1,2,'job'}) 2 set2 = {1,2,'job'} 3 4 print(set1,set2)
2.2 集合的增加
1 #add 2 set1 = {'楊過','周伯通','小龍女','黃蓉','郭靖'} 3 set1.add('李莫愁') 4 print(set1) 5 6 #update 迭代增加 7 set1.update('孫不二') 8 print(set1)
2.3 集合的刪
1 #remove 刪除一個元素 2 set1.remove('楊過') 3 print(set1) 4 5 #pop 隨機刪除 6 set1.pop() 7 print(set1) 8 9 #clrar 清空 10 set1.clear() 11 print(set1) 12 13 #del 14 del set1 15 print(set1)
2.4 集合其它操作
交集(& 或者 intersection)
1 set1 = {'楊過','周伯通','小龍女','黃蓉','郭靖'} 2 set2 = {'王重陽','林朝英','小龍女'} 3 print(set1&set2) 4 print(set1.intersection(set2))
並集(| 或者 union)
1 set1 = {'楊過','周伯通','小龍女','黃蓉','郭靖'} 2 set2 = {'王重陽','林朝英','小龍女'} 3 print(set1|set2)4 print(set1.union(set2))
差集(- 或者 difference)
1 set1 = {'楊過','周伯通','小龍女','黃蓉','郭靖'} 2 set2 = {'王重陽','林朝英','小龍女'} 3 print(set1-set2) 4 print(set1.difference(set2)) #{'黃蓉', '郭靖', '周伯通', '楊過'}
反交集 (^ 或者 symmetric_difference)
1 set1 = {'楊過','周伯通','小龍女','黃蓉','郭靖'} 2 set2 = {'王重陽','林朝英','小龍女'} 3 print(set1^set2) 4 print(set1.symmetric_difference(set2))
子集與超集
1 set1 = {1,2,3} 2 set2 = {1,2,3,4,5,6} 3 4 print(set1 < set2) 5 print(set1.issubset(set2)) # 這兩個相同,都是說明set1是set2子集。 6 7 print(set2 > set1) 8 print(set2.issuperset(set1)) # 這兩個相同,都是說明set2是set1超集。
frozenset不可變集合,讓集合變成不可變型別。
s=frozenset('job') print(s,type(s))
3、深淺copy
賦值運算,l1與l2指向的是同一個記憶體地址,所以他們是完全一樣的。
1 l1 = [1,2,3,['john','job']] 2 l2 = l1 3 4 l1[0] = 111 5 print(l1) 6 print(l2)
淺拷貝copy 第一層建立的是新的記憶體地址,而從第二層開始,指向的都是同一個記憶體地址,所以,對於第二層以及更深的層數來說,保持一致性。
1 l1 = [1,2,3,['john','job']] 2 l2 = l1.copy() 3 print(l1,id(l1)) 4 print(l2,id(l2)) 5 6 l1[1] = 222 7 print(l1,id(l1)) 8 print(l2,id(l2)) 9 10 l1[3][0]='華仔' 11 print(l1,id(l1[3])) 12 print(l1,id(l2[3]))
深拷貝 deepcopy 兩個是完全獨立的,改變任意一個的任何元素(無論多少層),另一個絕對不改變。
1 import copy 2 l1 = [1,2,3,['barry','alex']] 3 l2 = copy.deepcopy(l1) 4 5 print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 6 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 7 8 l1[1] = 222 9 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 10 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 11 12 l1[3][0] = 'wusir' 13 print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 14 print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304