python中的引用傳參


python語言的參數傳遞是引用傳遞,即被調用函數中修改了形式參數值,調用函數的實際參數值也被改變。函數調用時,調用函數把實參變量的“地址”傳給形參,整個執行期間實參和形參共用同一地址的存儲單元,實參和形參其實就是一個,被調函數對形參的任何操作都等同於對實參的操作,因此實參值會隨着被調用函數的形參值的改變而改變。

python中:對於不可變類型:因變量不能修改,所以運算不會影響到變量自身;

     對於可變類型:函數體內的運算有可能會更改傳入的實參值

引用傳參一:

a = 100  # 這里的a是不可變類型


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


test(a)
print("函數外:", a, id(a))

函數內: 200 1572488560
函數外: 100 1572486960

引用傳參二:

a = [100]  # 這里的a是一個列表,是可變類型


def test(a):
    a += a  # 由於a是可變類型,所以這里是修改a
    print("函數內:", a, id(a))


test(a)
print("函數外:", a, id(a))

函數內: [100, 100] 20268456
函數外: [100, 100] 20268456

引用傳參三:

a = 100  # 這里的a是不可變類型


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


test(a)
print("函數外:", a)

函數內: 200
函數外: 100

 引用傳參四:

a = [100]  # 這里的a是一個列表,是可變類型


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


test(a)
print("函數外:", a)

函數內: [100, 100]
函數外: [100]

 


免責聲明!

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



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