1. 程式人生 > >【Python】變數型別、變數名、記憶體地址

【Python】變數型別、變數名、記憶體地址

Python中相同的值在記憶體中到底會儲存幾份

在Python中主要有兩種資料型別, 一種是可變資料型別, 另一種是不可變資料型別

  • 不可變資料型別

     數字型:  int, float, complex, bool, long
     字元型:  str
     元  祖:  tuple
    
    • 1
    • 2
    • 3
  • 可變資料型別

     列表: list
     字典: dict
    
    • 1
    • 2

不可變資料型別

不可變資料型別在第一次宣告賦值宣告的時候, 會在記憶體中開闢一塊空間, 用來存放這個變數被賦的值, 存放這個值的記憶體空間就是記憶體中的一個地址, 而這個變數實際上儲存的, 並不是被賦予的這個值, 而是存放這個值所在空間的記憶體地址, 通過這個地址, 變數就可以在記憶體中取出資料了. 所謂不可變就是說, 我們不能改變這個資料在記憶體中的值, 所以當我們改變這個變數的賦值時, 只是在記憶體中重新開闢了一塊空間, 將這一條新的資料存放在這一個新的記憶體地址裡, 而原來的那個變數就不在引用原資料的記憶體地址而轉為引用新資料的記憶體地址了.在這裡插入圖片描述

以上, 所有不可變型別的資料都是這樣的引用方式, 包括函式中的形參, 實際上是引用的是實參的記憶體地址, 函式的返回值, 與其接收值都是一樣的記憶體地址

可變資料型別

當你第一次聲明瞭一個可變資料型別的時候, 同樣會在記憶體中開闢一個空間, 並且將你所賦的資料值放在這塊記憶體中, 然後將這個變數指向資料所在的記憶體地址, 不同的是, 可變資料型別可以對記憶體中的資料進行修改, 並且不會導致變數引用地址的變化, 但是這種修改僅限於Python中的內建方法, 比如list.append(), list.remove(), dict.pop(), dict.clear()等, 如果要是進行重新賦值的操作的話, 一樣會改變變數的地址指向在這裡插入圖片描述

此外, 有一個需要注意的地方就是, 對一個字典的key以及列表的項進行單獨更改, 同樣是不會改變字典變數或列表變數的記憶體地址指向的, 但是, 會改變對應的key以及陣列項的記憶體地址, 因為key實質上也是一個變數, 當對它賦值的時候, 也會在記憶體中開闢一個空間儲存其資料, key同樣也只是儲存著資料在記憶體中的地址.在這裡插入圖片描述

--------------------- 本文來自 Lucky_Q 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/lucky_q/article/details/82785725?utm_source=copy