標籤:set super nbsp 記憶體位址 remove 清空 可重複 一個 去重
一、集合
集合是無序的,不可重複的資料集合。集合裡面的元素是不可雜湊的(不可變類型)(元素、字串、數字),但是集合本身不可雜湊(所以集合做不了字典的鍵)。
主要功能:
1.去重,把一個列表變成集合,就自動去重了。
2.關係測試,測試兩組資料之前的交集、差集、並集等關係。
1.建立集合
set = {‘a‘,‘b‘,‘c‘}
set = set({‘a‘,‘b‘,‘c‘})
print(set)
2.增
set.add(‘asd‘) #增加
set.update(‘asd‘) #迭代加,一個一個加
3.刪除
set.remove(‘alex‘) #按元素刪
set.pop() #隨機刪除
set.clear() #清空,傳回值為 set()
del set #刪除字集
4.查
print(set)
5.其他動作
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
1)交集(set1和set2相同元素)
print(set1 & set2)
print(set1.intersection(set2))
2)並集(set1和set2所有的元素)
print(set1 | set2)
print(set1.union(set2))
3)差集(set1裡有set2裡沒有的元素)
print(set1 - set2)
print(set1.difference(set2))
4)反交集(set1和set2不同的元素)
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
5)子集(set1裡元素set2裡是否都有)
print(set1 < set2)
print(set1.issubset(set2))
6)超集(set2裡是否有se1所有元素)
print(set2 > set1)
print(set2.issuperset(set1))
7)不可變合集(frozenset)
set1 = {4,5}
set2 = frozenset(set1)
print(set2,type(set2))
結果:frozenset({4, 5}) <class ‘frozenset‘>
二、深入copy
1.賦值運算
l1 = [1,2,3,[‘alex‘,‘barry‘]]
l2 = l1
l1[0] = 111
print(l1 is l2)
l1和l2指向的都是同一個記憶體位址,所以更改l1,l2也會更改。
2.淺copy
l1 = [1,2,3,[‘alex‘,‘barry‘]]
l2 = l1.copy()
l1.append(‘as‘)
print(l1 is l2) #結尾為False,l1加上內容後,l1不等於l2
l1 = [1,2,3,[‘alex‘,‘barry‘]]
l2 = l1.copy()
l1[3].append(‘sa‘)
print(l1[3] is l2[3]) 結果為True,l1裡的列表變換l2裡的列表也跟著變換。
結論:淺copy第一層是不一樣的記憶體位址,但是第二層或更深層還是用的同一個記憶體位址。
3.深copy
為瞭解決淺copy問題,使用copy模組。
import copy
l1 = [1,2,3,[‘alex‘,‘barry‘]]
l2 = copy.deepcopy(l1)
l1[3].append(‘sa‘)
print(l1 is l2)
這樣l1和l2的記憶體位址就完全就不一樣了
python第七天