Python變量賦值


在Python中,當給變量賦值時,系統會為這個值分配內存空間,然后讓這個變量指向這個值;當改變變量的值時,系統會為這個新值分配另一個內存空間,然后還是讓這個變量指向這個新值。

Python的變量賦值,變量改變的是地址,不變的是內存空間中的值。變量賦值實際上是修改了值的引用,指向了新值的地址。

當給變量賦新值后,沒有任何變量指向舊值的內存空間,這個舊值的空間數據為垃圾數據,系統會自動將其刪除,回收它占用的內存空間。

Python的id()函數可以用來查看變量的內存地址。

如:a的值改為2之后,內存地址也改變了。原值1的內存空間沒有變量指向它,將被系統回收。

# a和1的地址相同,表明a指向1
>>> a=1
>>> id(1)
1536673456
>>> id(a)
1536673456

# a改為2,地址也發生變化
>>> a=2
>>> id(2)
1536673488
>>> id(a)
1536673488
>>> id(1)
1536673456

由此,Python中的值互換,就可以不需要中間變量的參與,直接互換變量即可:a,b=b,a

>>> a=1
>>> b=2
>>> id(a)
1536673456
>>> id(b)
1536673488
>>> a,b=b,a
>>> a
2
>>> b
1
>>> id(a)
1536673488
>>> id(b)
1536673456
>>> id(1)
1536673456
>>> id(2)
1536673488

另外,為了提高內存空間的利用效率,Python對於一些數值比較小的int整型變量使用了相同的內存空間。如果數值越大,則使用的地址會不一樣。

# 1的內存地址都一樣
>>> id(1)
1536673456
>>> id(1)
1536673456
>>> id(1)
1536673456
>>> id(1)
1536673456
>>> id(1)
1536673456

# 1.0的內存地址偶爾不一樣
>>> id(1.0)
3150552963784
>>> id(1.0)
3150552962128
>>> id(1.0)
3150552963784
>>> id(1.0)
3150552962128
>>> id(1.0)
3150552963808

# 1111的內存地址多數都不一樣
>>> id(1111)
3150591410672
>>> id(1111)
3150591411984
>>> id(1111)
3150591412496
>>> id(1111)
3150591410672
>>> id(1111)
3150591411984

# 11111111111111的內存地址都不一樣
>>> id(11111111111111)
3150591412368
>>> id(11111111111111)
3150591412304
>>> id(11111111111111)
3150591412336
>>> id(11111111111111)
3150591411984
>>> id(11111111111111)
3150591412496

本文參考:
https://blog.csdn.net/Invokar/article/details/89138684
https://blog.csdn.net/oppo62258801/article/details/94147509


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM