1. 程式人生 > 其它 >今日總結——字典、元組、集合的內建方法和垃圾回收機制

今日總結——字典、元組、集合的內建方法和垃圾回收機制

今日內容總結

一、字典型內建方法

二、元組型內建方法

三、 集合型內建方法

四、垃圾回收機制

一、字典型內建方法

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來一次

今日總結~