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