1. 程式人生 > 其它 >字典、集合、元組內建方法,垃圾回收機制

字典、集合、元組內建方法,垃圾回收機制

字典的內建方法

  1. 型別轉換

    dict()
    eg:
       print(dict(a='a', b='b', c=2))
       #{'a': 'a', 'b': 'b', 'c': 2}
  2. 按key取值

    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    print(d1['name'])  # tzui
    print(d1['xxx'])  # 鍵值不存在直接報錯
    # 推薦使用get來進行字典取值
    print(d1.get('name'))  # tzui
    print(d1.get['xxx'])  # None
    也可以在後面再新增一個,鍵存在,則不適用第二個引數
    print(d1.get('xxx','你不在我就出來了')) # 你不在我就出來了
    print(d1.get('age','你不在我就出來了'))  # 3
  3. 修改值

    字典也是可變型別,修改的是V值,用K值定位

    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    print(id(d1))  # 2178905689832
    d1['name'] = 'qwe'
    print(d1)  # {'name': 'qwe', 'age': 3, 'hobby': 'game'}
    print(id(d1))  # 2178905689832
  4. 新增鍵值對

    鍵不存在則直接新增一個鍵值對
    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    d1['glass'] = 'ren'
    print(d1)
    # {'name': 'tuzi', 'age': 3, 'hobby': 'game', 'glass': 'ren'}
  5. 統計字典中鍵值對的個數

    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    print(len(d1))  # 3

     

  6. 成員運算

    只能判斷K值

    print('name' in d1)  # True
    print('tuzi'in d1)  # False
  7. 刪除鍵值對

    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    del d1['name']  # 通用的方式
    print(d1)
    # {'age': 3, 'hobby': 'game'}
    'pop','popitem'
    # pop用來彈出一個值
    print(d1.pop('age'))  # 3
    print(d1)  # {'name': 'tuzi', 'hobby': 'game'}
    # popitem 用來隨機彈出一個值,pychorm中給預設為彈出最後一個值了
    print(d1.popitem())  # ('hobby', 'game')
    print(d1)  # {'name': 'tuzi', 'age': 3}
  8. 獲取所有的鍵、值、鍵值對

    d1 = {'name': 'tuzi',
         'age': 3,
         'hobby': 'game'
        }
    print(d1.keys()) # keys 獲取所有的鍵值 可以看成是列表
    # dict_keys(['name', 'age', 'hobby'])
    print(d1.values())  # 獲取所有的V值,可以看成是列表
    # dict_values(['tuzi', 3, 'game'])
    print(d1.items())#獲取所有的鍵值對可以看成是列表套元組
    # dict_items([('name', 'tuzi'), ('age', 3), ('hobby', 'game')])
    '在python2中三個方法就是直接返回一個列表'
  9. update更新字典

    d1 = {'name': 'tuzi',
    'age': 3,
    'hobby': 'game'
    }
    d1.update({'name':'qwe','glass':'ren'})
    print(d1)
    #{'name': 'qwe', 'age': 3, 'hobby': 'game', 'glass': 'ren'}
    # K值存在就修改,不存在就直接新增一個KV鍵值對
  10. formkeys快速生成字典

d2 = dict.fromkeys(['k1','k2','k3'],[])
print(d2)
# {'k1': [], 'k2': [], 'k3': []}
# 後面列表裡填入元素則會,將整個列表的元素加入到每個K對應的V值裡
"""筆試題"""
# dic['k1'].append(111) # 三個鍵指向的是同一個列表
# print(dic) # {'k1': [111], 'k2': [111], 'k3': [111]}
  1. setdefault

    鍵不存在則新增鍵值對,並且有返回結果是新增的V

    d2 = {'k1':111,'k2':222,'k3':333}
    d2.setdefault('k4',444)
    # 鍵不存在則新增鍵值對 並且有返回結果是新增的v
    print(d2)
    # {'k1': 111, 'k2': 222, 'k3': 333, 'k4': 444}
    print(d2.setdefault('k1', '阿達'))
    # 111
    # 鍵存在則返回對應的值,不做修改

元組內建方法

可以看成是不可變的列表

  1. 型別轉換

    支援for迴圈的資料型別都可以轉為元組

    可以轉換:字串,列表,字典,集合

    不可以轉換:整型,浮點型,布林型

  2. 元組的特性

    當元組內只有一個元素的時候 一定要在元素的後面加上逗號

    t1 = (11, 22, 33, 44)
    print(type(t1))
    # <class 'tuple'>
    t2 = (11)
    print(type(t2))
    # int
    t2 = (11.11)
    print(type(t2))
    # float
    t2 = ('jason')
    print(type(t2))
    # str
    """針對這種只有一個元素的情況,在嚴肅的後面加一個逗號就可以解決了"""
  3. 索引取值

    t1 = (11,22,33,44,55,66,77,88,99)
    print(t1[4])
    # 55
  4. 切片操作

    t1 = (11,22,33,44,55,66,77,88,99)
    print(t1[1:5])
    # (22, 33, 44, 55)
  5. 間隔

    t1 = (11,22,33,44,55,66,77,88,99)
    print(t1[2:8:2])
    # (33, 55, 77)
  6. 統計元組內元素的個數

    len()

    t1 = (11,22,33,44,55,66,77,88,99)
    print(len(t1))
    # 9
  7. 成員運算

    in

    t1 = (11,22,33,44,55,66,77,88,99)
    print(18 in t1) # False
  8. 統計字串中元素出現的次數

    count()

    t1 = (1,2,1,2,12,1,2,12,1,21,1,2,1,1,3,1,1,1,2,)
    print(t1.count(1)) # 10
  9. 元組內元素不能"修改": 元組內各個索引值指向的記憶體地址不能修改

       """
    筆試題
    tt = (11, 22, 33, [11, 22])
    tt[-1].append('heiheihei')
    問:執行之後的結果 正確答案選B
    A.報錯 B.正常新增 C.不知道
    """
    # tt索引取的是[11,22]列表,根據上圖原理,列表屬於可變型別,所以可以被修改
  10. 集合的內建方法

    型別轉換

    可以轉換:字串,列表,字典,元組

    不可以轉換:整型,浮點型,布林型(會報錯)

    set()
    print(set('tuzi'))
    print(set([1,2,3]))
    print(set({'name':'tuzi','age':18}))
    print(set((11,22,33)))
    # 集合內的元素是不可變型別

    集合會用於去重和關係運算

    去重:集合內不能重複的元素(自帶去重屬性),如果出現了會被集合自動去重

    關係運算:判斷兩個群體內的差異(共同好友,共同關注,共同點贊)

    去重:

    s1 = {1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3}
    print(s1)
    # {1, 2, 3}

    關係運算

    s1 = {'tuzi','tom','qwe','jerry'}
    s2 = {'tuzi','asd','jerry','shazi'}
    print(s1 & s2) # &判斷兩個集合裡共有的
    # {'tuzi', 'jerry'}
    print(s1 - s2) # - 判斷s1裡面s2沒有的資料
    # {'tom', 'qwe'}
    print(s1 | s2) # | 兩個集合加起來所有的資料
    #{'jerry', 'tom', 'asd', 'qwe', 'tuzi', 'shazi'}
    print(s1 ^ s2) # 兩個集合共同沒有對方的資料,相當於兩個人各自的好友

     

垃圾回收機制

1.引用技術
python會將引用為0的資料除
2.標記清除
當記憶體空間即將移除(滿了)的時候,python會自動啟動應急機制
停止程式的執行,挨個檢查值的引用計數並給計數為0的資料打上標記
然後一次性清理掉
3.分代回收
根據值存在的時間長短,將值劃分為三個等級(1,2,3)
等級1 檢測機制每隔5s來一次,經常引用的資料移到等級2中
等級2 檢測機制每隔1min來一次,經常引用的資料移到等級3中
等級3 檢測機制每隔5min來一次