Python中的引用傳參


Python中函數參數是引用傳遞(注意不是值傳遞)。對於不可變類型,因變
量不能修改,所以運算不會影響到變量自身;而對於可變類型來說,函數體
中的運算有可能會更改傳入的參數變量。

引用傳參一:

>>> a = 100 #這里的a是不可變類型
>>> def test(a):
...     a+=a 
        #這個式子有兩層含義:1.這里可能是重新定義一個新的變量a,2.也有可能是修改a的值,但由於全局
        #變量a不能修改,所以此處是重新定義了一個a;
...     print("函數內:%d"%a)
...
>>> test(a)
函數內:200
>>> print(a)
100

 

引用傳參二:

>>> a = [100] #這里的a是一個列表,是可變類型
>>> def test(a):
...     a+=a #由於列表a是可變類型,所以這里是修改a
...     print("函數內:")
...     print(a)
...
>>> test(a)
函數內:
[100, 100]
>>> print(a)
[100, 100]

 

引用傳參三:

>>> a = 100
>>> def test(a):
...     a=a+a  #最初為了好理解,所以可以認為a+=a等價於a=a+a,所以這里同引用傳參一
...     print("函數內:%d"%a)
...
>>> test(a)
函數內:200
>>> print(a)
100

 

引用傳參四:

>>> a = [100]
>>> def test(a):
        #1. 先算 =號右邊的
        #2. 算出來的結果是[100,100]
        #3. a = [100,100]
        #4. 讓a變量指向了[100,100],即a保存的是[100,100]的引用(內存地址)
...     a=a+a #對於這種情況,等號左邊的a是重新定義的一個量,此時a=a+a與a+=a不一樣
...     print("函數內:")
...     print(a)
...
>>> test(a)
函數內:
[100, 100]
>>> print(a)
[100]

 

事實上,我們可以通過打印相應變量的地址來幫助我們理解,例如:

a是int類型的情況:

 

a是列表的情況:


免責聲明!

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



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