今日總結——字典、元組、集合的內建方法和垃圾回收機制
阿新 • • 發佈:2022-03-10
今日內容總結
一、字典型內建方法
二、元組型內建方法
三、 集合型內建方法
四、垃圾回收機制
一、字典型內建方法
1 、型別轉換
dict()——使用方式 ''' 字典型可以轉換的型別很少''' print(dict(11)) # 整型 報錯 print(dict(11.11)) # 浮點型 報錯 print(dict('owen')) # 字串 報錯 print(dict([11, 22, 33, 44])) # 列表 報錯 print(dict((11, 22, 33, 44))) # 元組 報錯 print(dict({11, 22, 33, 44})) # 集合 報錯 print(dict(True)) # 布林值 報錯
2 、字典型內建功能
# 建立一個字串 l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] } 1、按key取值 print(l1['name']) # 結果為owen print(l1['123']) # 直接報錯(所以此方法不推薦使用) print(l1.get('name')) # 結果為Owen print(l1.get('123')) # 結果為none 不會發生報錯 print(l1.get('123', '鍵不存在')) # 結果為鍵不存在,第一個如果不在則會none,寫了則返回第二個引數 print(l1.get('age', '鍵不存在')) # 結果為20 第一個在的話,第二個引數就使用不到
2、修改值——字典型也是可變型別
l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] }
print(id(l1))
l1['age'] = 18
print(id(l1))
# 記憶體地址沒有發生改變
3、新增鍵值對
l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] }
l1['height'] = 180
print(l1)
# 當鍵不存在時就會新增一個鍵值對
4、統計字典中鍵值對的個數(len) l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] } print(len(l1)) # 結果為 3
5、成員運算也只能判斷key鍵
l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] }
print('owen' in l1) # 結果為false
print('name' in l1) # 結果為true
6、刪除鍵值對
l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] }
del l1['name'] # 通用刪除方式
print(l1)
print(l1.pop('age'))
l1.popitem()
print(l1)
7、獲取所有的鍵(keys),所有的值(values),所有的鍵值對(items)
用法:
l1 = { 'name': 'owen', 'age': 20, 'hobbies': ['running', 'painting'] }
print(l1.keys()) # 取所有的鍵
print(l1.values()) # 取所有的值
print(l1.items()) # 取所有的鍵值對
'''結果可以看成列表'''
字典型中需要了解知識
1、update更新字典
用法:
dic = {'l1': 'owen', 'l2': 'Tony', 'l3': 'kery'}
dic.update({'l1': 'wuhua', 'l4': 'xxx'})
print(dic)
# 當鍵存在時修改值 鍵不存在則新增
2、fromkeys()快速生成字典
用法
dic = dict.fromkeys(['k1', 'k2', 'k3'], [111])
print(dic)
3、setdefault()
dic = {'k1': 111, 'k2': 222}
dic.setdefault('k3', 333)
print(dic) # {'k1': 111, 'k2': 222, 'k3': 333}
# 鍵不存在時增加一個鍵值對
dic.setdefault('k1', '***')
print(dic) # {'k1': 111, 'k2': 222, 'k3': 333}
# 鍵存在時,值不發生改變
二、元組型內建方法(不可變的列表)
1、型別轉換
支援for迴圈的資料型別都可以轉成元組
print(tuple(11)) # 整型 —— 報錯
print(tuple(11.11)) # 浮點型 —— 報錯
print(tuple('owen')) # 字串
print(tuple([11, 22, 33, 44])) # 列表
print(tuple({'name': 'owen'})) # 字典
print(tuple({11, 22, 33, 44})) # 集合
print(tuple(True)) # 布林值 —— 報錯
2 、元組的特性
當元組內只有一個元素的時候,根據type檢視都不是元組型
而在但個元素後加上逗號,他們才能顯示為元組型
'''所以在儲存資料時,如果內部只有一個元素,加個逗號'''
3 、元組內建操作
1、索引取值
l1 = (1,2,3,4,56)
print(l1[2]) # 結果為3
2、切片操作
l1 = (1,2,3,4,56)
print(l1[0:2]) # 結果為(1, 2)
3、間隔
l1 = (1,2,3,4,56)
print(l1[0:4:2]) # 結果為(1, 3)
4、統計元組內元素的個數(len)
l1 = (1,2,3,4,56)
print(len(l1)) # 結果為5
5、成員運算(in)
l1 = (1,2,3,4,56)
print(56 in l1) # 結果為true
6、統計某個元素出現的次數(count)
l1 = (1,2,3,4,56)
print(l1.count(2)) # 結果為true
7、元組內的元素不能'修改':元組內各個索引值指向的記憶體地址不能修改
l1 = (1,2,3,4,56)
l1[1] = 123 # 報錯
''' 筆試題 '''
tt = (11, 22, 33, [11, 22])
tt[-1].append('heiheihei')
問:執行之後的結果 正確答案選B
A.報錯 B.正常新增 C.不知道
"""
tt = (11, 22, 33, [11, 22])
print(id(tt[-1]))
tt[-1].append('heiheihei')
print(id(tt[-1]))
print(tt)
三、集合內建方法
1 、型別轉換
print(set(11)) # 報錯
print(set(11.11)) # 報錯
print(set('owen')) # {'e', 'n', 'o', 'w'}
print(set([11,22,33,44])) # {33, 11, 44, 22}
print(set({'name':'owen'})) # {'name'}
print(set((11,22,33))) # {33, 11, 22}
print(set(True)) # 報錯
'''整數、浮點型、布林值無法轉換,集合內元素只能是不可變的型別'''
2 、集合兩大功能
1、去重
集合本身自帶的特性就是不能出現重複的元素,有的話集合會自動去除
2、關係運算
判斷兩個群體的差異,是否有相同的、不同的
l1 = {'owen', 'kery', 'mark', 'jerry'} # 小李的好友列表
l2 = {'mark', 'tom', 'jerry', 'jack'} # 小王的好友列表
# 1.求兩個人的共同好友(&)
print(l1 & l2)
# 2.求小李的單獨好友(-)
print(l1 - l2)
# 3.求兩個人所有的好友(|)
print(l1 | l2)
# 4.求兩個人各自的好友(^)
print(l1 ^ l2)
四、垃圾回收機制
'''python底層針對空間的申請和釋放都已經設計好了,不需要在執行什麼操作'''
1 、引用計數
python中會將引用計數為0的資料清除
name = 'owen' # owen引用了一次,計數1
l1 = name # owen引用了兩次,計數2
''' 使用一次,計數加1 '''
2 、標記清除
當記憶體空間即將滿了的時候 python會自動啟動應急機制
停止程式的執行 ,檢查值的引用計數並給計數為0的資料打上標記
然後一次性清理掉
3 、分代回收
根據值存在的時間長短 將值劃分為三個等級(1,2,3)
等級1 檢測機制每隔5s來一次
等級2 檢測機制每隔20s來一次
等級3 檢測機制每隔100s來一次