6.Python初窺門徑(小數據池,集合,深淺拷貝)

Python(小數據池,集合,深淺拷貝)

一.小數據池

  1. 什麼是小數據池
    小數據池就是python中一種提升效率的方式,固定數據類型,使用同一個內存地址python

  2. 小數據池 is和==的區別
    == 判斷等號倆邊的值是否相同
    is 判斷兩個內存地址是否相同app

  3. 小數據池和代碼塊的關係
    注意 : 先執行代碼塊後執行小數據池函數

    ​ 小數據池 : 支持str,int,bool
    ​ 數字範圍 : -5~256
    ​ 字符串 : 1.在作乘法的時候總長度不能超過20
    ​ 2.自定義的字符串,長度不限制,字符串必須(字母,數字,下劃線)組成
    ​ 3.特殊字符(中文除外)定義一個時候,進行駐留
    ​ 4.字符串1,其實就是賦值code

    ​ 代碼塊 : 一個文件,一個模塊,一個函數,一個類
    ​ 數字 : 所有駐留
    ​ 字符串 : 1.字符串作乘法的時候總長度不能超過20
    ​ 2.自定義的都駐留
    ​ 3.字符串*1,其實就是賦值
    ​ 4.python3.7 乘法的時候總長度不能超過4096內存

二.集合

  1. 集合介紹
    什麼是集合 : set就是dict類型的數據可是不保存value,只保存key.set也用{}表示
    關鍵字 : set
    集合特色 : 集合是可變的,集合內的元素是無序的,元素不可變而且惟一,自然去重
  2. 集合操做
    • 增 :
      set.update()迭代添加
      set.add()集合添加
    • 刪 :
      set.pop()隨即刪除
      set.remove()制定元素刪除
      set.clear()清空元素
      del s 刪除整個集合
    • 改 : 刪除後添加
    • 查 : for查找
    • 其餘操做 :
      print(s1-s2)差集
      print(s1|s2)並集
      print(s1&s2)交集
      print(s1^s2)反交集
      print(s1>s2)父集
      print(s1<s2)子集
    • 凍結集合 : 把可變的轉換成不可變的
      frozenser()
s = frozenset(["武當","少林","峨眉","丐幫"])
dic = {s:'123'} # 凍結s後就能夠正常使用了
print(dic)

三.深淺拷貝

  1. 先了解如下什麼是賦值rem

    ​ 對於list, set, dict來講, 直接賦值,實際上是把內存地址交給變量,並非複製一分內容,因此lst1的內存指向和lst2是同樣的,lst1改變了,lst2也一樣發生了改變.字符串

    lst1 = ["武當","少林","峨眉","丐幫"]
    lst2 = lst1
    print(lst1)
    print(lst2)
    lst1.append("師太")
    print(lst1) # ["武當","少林","峨眉","丐幫","師太"]
    print(lst2) # ["武當","少林","峨眉","丐幫","師太"]
    ---------------------------------
    dic1 = {"age":104,"name":"張三丰"}
    dic2 = dic1
    print(dic1) # {"age":104,"name":"張三丰"}
    print(dic2) # {"age":104,"name":"張三丰"}
    dic1['name']="滅絕"
    print(dic1) # {"age":104,"name":"滅絕"}
    print(dic2) # {"age":104,"name":"滅絕"}
  2. 淺拷貝class

    ​ 淺拷貝,只會拷貝第一層,二層的內容不會拷貝,因此被稱爲淺拷貝效率

    lst1 = ["張三丰","方丈","乞丐"]
    lst2 = lst1.copy()
    lst1.append("滅絕")
    print(lst1)
    print(lst2)
    print(id(lst1), id(lst2))
    # 兩個lst徹底不同,內存地址和內容也不同,可是實現了內存的拷貝
    ---------------------------------
    lst1 = ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]]
    lst2 = lst1.copy()
    lst1[3].append("滅絕")
    print(lst1) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]]
    print(lst2) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]]
    print(id(lst1[3]),id(lst2[3])) # id相同
    # 只會拷貝第一層,二層的內容不會拷貝,所以第二層元素髮生改變則都會改變.
  3. 深拷貝import

    ​ 深度拷貝,把元素內部的元素徹底進行拷貝複製,一個改變另外一個不會跟着改變,當使用深拷貝時須要調用import copy.

    import copy
    lst1 = ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]]
    lst2 = copy.deepcopy(lst1)
    lst1[3].append("滅絕")
    print(lst1) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]]
    print(lst2) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]]
    print(id(lst1[3]), id(lst2[3])) # id不一樣
    # 元素內部的元素徹底進行拷貝複製,一個改變另外一個不會跟着改變
相關文章
相關標籤/搜索