1. 程式人生 > >python基礎—基本資料型別二(set 集合,深淺拷貝)

python基礎—基本資料型別二(set 集合,深淺拷貝)

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