1. 程式人生 > 實用技巧 >python變數與地址的關係

python變數與地址的關係

python變數與地址的關係

在C語言中,系統會為每個變數分配記憶體空間,當改變變數的值時,改變的是記憶體空間中的值,變數的地址是不改變的。

而在python中,Python採用的是基於值的管理方式。

當給變數賦值時,系統會為這個值分配記憶體空間,然後讓這個變數指向這個值;當改變變數的值時,系統會為這個新的值分配另一個記憶體空間,然後還是讓這個變數指向這個新值。

也就是說,C語言中變數變的是記憶體空間中的值,不變的是地址;而在Python中,變數變的是地址,不變的是記憶體空間中的值

x = 12
print(x)

x = 3.14
print(x)

同時,如果沒有任何變數指向記憶體空間的某個值,這個值稱為垃圾資料,系統會自動將其刪除,回收它佔用的記憶體空間。

同時,如果沒有任何變數指向記憶體空間的某個值,這個值稱為垃圾資料,系統會自動將其刪除,回收它佔用的記憶體空間。

另外,我們可以使用python的id()函式來檢視變數的記憶體地址。

a = 2.0
b = 2.0
pirnt(id(a))  # 2658670250000
pirnt(id(b))  # 2658670249968

a = 2
b = 2
print(id(a))  # 140725523280176
print(id(b))  # 140725523280176

我們看到,當a,b都是2.0時,它們的地址不一樣,說明系統為a,b分配了不同的記憶體空間。但是,當a,b都是2時,它們的地址是一樣的,怎麼回事呢?這是因為,為了提高記憶體空間的利用效率,對於一些比較小的整型變數(int)使用了相同的記憶體空間。如果數值比較大,地址就不一樣了。

a = 2
b = 2
print(id(a))  # 140725523280176
print(id(b))  # 140725523280176

a = 222
b = 222
print(id(a))  # 140725523287216
print(id(b))  # 140725523287216

a = 2222
b = 2222
print(id(a))  # 2658670249520
print(id(b))  # 2658670249776