變量的引用
在python中,所有的變量都是指向地址,變量本身不保存數據,而是保存數據在內存中的地址。我們用下面的程序來理解:
1 a = 10 2 print(id(a)) 3 a = 11 4 print(id(a))
(利用id( )方法查看數據的地址)
輸出結果為:
可以發現:修改變量的值,變量保存的地址隨之改變。
python中:
- 變量和數據是分開存儲的
- 變量 中保存着數據在內存中的地址
我們把變量中記錄數據的地址的行為,叫做 引用。
通俗的來說,在 Python
中,變量的名字類似於 便簽紙 貼在 數據 上。
再看一段代碼:
1 a = 10 2 print(id(a)) 3 b = a 4 print(id(b)) 5 c = 10 6 print(id(c)) 7 d = 11 8 print(id(d))
結果如下:
從上面運行結果中,我們可以知道:
1.b=a是地址傳遞
2.聲明一個變量時,如果內存中已經有變量要保存的內容了,會將該變量指向內存中原有內容的地址,如果內存中沒有變量要保存的內容,就會在內存中開辟一塊新的空間用來保存變量要保存的內容。
函數的參數和返回值的傳遞
我們通過一個程序來弄清楚函數的參數和返回值的傳遞方式是地址傳遞還是值傳遞。
def test(num): print("-" * 40) print("%d 在函數內的內存地址是 %x" % (num, id(num))) # 說明函數的參數傳遞時地址傳遞 result = 100 print("返回值 %d 在內存中的地址是 %x" % (result, id(result))) print("-" * 40) return result a = 10 print("調用函數前,變量a引用的地址是 %x" % id(a)) r = test(a) print("調用函數時,實參內存地址是 %x" % id(a)) print("調用函數后,返回值內存地址是 %x" % id(r)) # 說明return返回值是地址傳遞
運行結果如下:
通過上面程序:
- 我們發現變量a以及將a傳給函數的參數num的地址都是一致的,說明函數的參數傳遞是地址傳遞。
- 函數中result變量和接受返回值的r變量的地址是相同的,說明函數中的返回值傳遞也是地址傳遞