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

Python可變與不可變型別

1. 什麼是不可變型別

  變數對應的值中的資料是不能被修改,如果修改就會生成一個新的值從而分配新的記憶體空間。

  不可變型別:

    •   數字(int,long,float)
    •   布林(bool)
    •   字串(string)
    •   元組(tuple)
1 n = 4
2 print(id(n))
3 n += 1  # 修改n講話生成新的值重新賦值給變數n
4 print(id(n))
5 
6 # >> 140725846909424
7 #    140725846909456

  結果:

  兩個不同的數字

 

1 b = True
2 print(id(b))
3 b = not
b 4 print(id(b)) 5 6 # >> 140725840030032 7 # 140725840030064

  結果:

  兩個不同的數字

 

1 str = 'abc'
2 print(id(str))
3 str += 'a'
4 print(id(str))
5 print(str)
6 
7 # >> 1990459568944
8 #    1990466471024
9 #    abca

 

2. 什麼是可變型別

  變數對應的值中的資料可以被修改,但記憶體地址保持不變。

  不可變型別:

    • 列表(list)
    • 字典(dict)
1 names = ['
劉備', '關羽', '張飛'] 2 print(id(names)) 3 names.append('曹操') 4 print(id(names)) 5 print(names) 6 # >> 1886830744456 7 # 1886830744456 8 # ['劉備', '關羽', '張飛', '曹操']

地址沒有變化

1 student = {'name': '孫尚香', 'zge': 29}
2 print(id(student))
3 student['age'] = 20
4 print(id(student))
5 print(student)
6 
7
# >> 2972485176600 8 # 2972485176600 9 # {'name': '孫尚香', 'zge': 29, 'age': 20}

 

3. 為什麼生成以上兩種情況

  因為python中的值是通過引用(地址值)傳遞的,不可變型別的值一旦被修改後會建立一個記憶體空間並且生成新的地址值,可變型別的值會在原記憶體空間中被修改。


4. 不可變型別執行過程和記憶體分析

 

 

5. 可變型別執行過程和記憶體分析