python中的變量引用小結


python的變量都可以看成是內存中某個對象的引用。(變量指向該內存地址存儲的值)

1.python中的可更改對象和不可更改對象

python中的對象可以分為可更改(mutable)對象與不可更改(immutable)對象

  • strings, tuples, 和numbers是不可更改的對象
    如果某個變量指向不可更改的對象,則重新賦值時。原對象被拋棄,變量會指向一個新對象。
  • list,dict等則是可以修改的對象
    如果是整個重新賦值可更改對象。一樣是原對象被拋棄,變量指向一個新開辟的內存對象。
    但如果是修改可更改對象的部分值,變量還是指向原地址,原對象也會相應修改。

如圖:nfoo是numbers為不可更改對象,lstFoo是list為可更改對象

當重新賦值時,發生的改變如下圖

如圖,左邊數值類型為不可變對象,變量若重新賦值,原對象被拋棄,指向一個新對象。
右邊是一個列表,改變列表中的元素,變量依舊指向列表的首地址。但是由於列表存儲的是每個元素在內存中的地址(也是引用),所以改變某個元素值,是該元素拋棄原對象指向一個新對象。

2.python的函數是引用調用,還是傳值調用?

在函數參數傳值時,變量也是內存對象的引用。

  • 當對象為可更改對象時,是引用調用,函數內參數的改變會影響到原始對象。
  • 當對象為不可更改對象時,就只是相當於傳值調用。


免責聲明!

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



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