1. 程式人生 > 其它 >可變型別與不可變型別

可變型別與不可變型別

可變型別:列表就是典型

 可變型別簡而言之就是本身在地址不變的情況下可以改變內部所儲存的資料。在資料更新的過程中不會佔用多餘的記憶體空間,也不會返回新的檔案。

      list_name = ['oliver', 'age', 'hobby', '16']
      print(id(list_name))  # 生成列表的第一個元素地址
      list_name[0] = 'barkie'  # 修改第一個元素的資料為'barkie'
      print(id(list_name))  # 生成列表的第一個元素地址
      print(list_name)

可以注意下這裡列表內的元素已經發生更改,但是列表的地址並沒有改變

      list_name = ['oliver', 'age', 'hobby', '16']
      list_name_add = ['kevin', 'justin', 'biber', 'faker']
      print(list_name.extend(list_name_add))  # 在原有的列表裡進行更改,並沒有生成新檔案,所以輸出這個結果應該為空,並沒有返回值
      print(list_name)

這裡直接輸出合併列表那個命令,結果為None,也就表示並沒有獲得返回值,反而訪問原變數名獲得更改後的返回值

可變型別變數名在更改資料時的指向流程

在對可變型別資料進行更改時,變數名的指向並不會改變,而是在資料內部進行更改,資料並沒有離開儲存它的區域,有沒有產生新的檔案,只是根據對資料的更改加了索引值或者刪除了索引值

不可變型別:字串是典型

 類似於可變型別,不可變型別就是改變內部儲存資料的時候地址一定會改變。在資料更新的過程中會產生新檔案,佔用更多的記憶體空間。

      str_name = '###oliver###'
      print(str_name.strip('#'))  # 結果為oliver
      print(str_name)  # 結果為###oliver###
      # 也就是在字串中的去除指定字元的操作會產生新檔案,不會對原字串進行更改

注:如果對不可變型別資料進行處理後,還要用原來變數名的,那麼就必須切斷變數名原來的指向,指向新產生檔案的路徑

      str_name = '###oliver###'
      print(id(str_name))  # 檢視變數名指向的地址
      str_name = str_name.strip('#')  
      print(id(str_name))  # 檢視變數名指向的地址

注:變數名地址已經發生更改,即產生了新檔案

不可變型別變數名在更改資料時的指向流程

在對原資料進行更改操作時,原來的資料不變,會生成一個新的資料,即下方紅箭頭指向的資料,原來的指向也會斷開。

結束