x=2 print(id(2)) print(id(x)) y='hello' print(id('hello')) print(id(y))
2022139072
2022139072
55049600
55049600
'''
在Python中一切皆對象,像2,'hello'這樣的值都是對象,只不過5是一個整型對象,而'hello'是一個字符串對象。
上面的x=2,在Python中實際的處理過程是這樣的:
先申請一段內存分配給一個整型對象來存儲整型值2,然后讓變量x去指向這個對象,實際上就是指向這段內存(這里有點和C語言中的指針類似)。
而id(2)和id(x)的結果一樣,說明id函數在作用於變量時,其返回的是變量指向的對象的地址。因為變量也是對象,所以在這里可以將x看成是對象2的一個引用。
原文鏈接:https://blog.csdn.net/tycoon1988/article/details/38850443
'''
x=2 print(id(x)) y=2 print(id(y)) s='hello' print(id(s)) t=s print(id(t))
2022139072
2022139072
64788352
64788352
從運行結果可以看到id(x)和id(y)的結果是相同的,id(s)和id(t)的結果也是相同的。這說明x和y指向的是同一對象,而t和s也是指向的同一對象。x=2這句讓變量x指向了int類型的對象2,而y=2這句執行時,並不重新為2分配空間,而是讓y直接指向了已經存在的int類型的對象2.這個很好理解,因為本身只是想給y賦一個值2,而在內存中已經存在了這樣一個int類型對象2,所以就直接讓y指向了已經存在的對象。這樣一來不僅能達到目的,還能節約內存空間。t=s這句變量互相賦值,也相當於是讓t指向了已經存在的字符串類型的對象'hello'(這個原理和C語言中指針的互相賦值有點類似)。
看這幅圖就理解了:
鏈接:https://blog.csdn.net/tycoon1988/article/details/38850443
