Python 中引數的傳遞

2022-06-29 11:54:10 字數 2841 閱讀 6396

學習 python 中,對 python 中的引數傳遞存有疑惑,想知道傳遞的是乙份拷貝還是引用位址,於是測試一番。

個人理解,如有誤請指出。

print("**********列表**********")

def listchanged(a): # 列表:同一引用

a[0] = 2

print(id(a))

a = [1]

print("呼叫函式前:" + str(a))

listchanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********集合**********")

def setchanged(a): # 集合:同一引用

a.add(2)

print(id(a))

a =

print("呼叫函式前:" + str(a))

setchanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********字典**********")

def dictchanged(a): # 字典:同一引用

a[1] = "2"

print(id(a))

a =

print("呼叫函式前:" + str(a))

dictchanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********數值**********")

def numberchanged(a): # 數值:結果變成不同引用

print("呼叫函式時:", id(a))

a += 1

print("重新賦值:", id(a))

a = 1

print("呼叫函式前:" + str(a))

numberchanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********字串**********")

def stringchanged(a): # 字串:結果變成不同引用

print("呼叫函式時:", id(a))

a += "a[:]" # 假裝拷貝

print("重新賦值:", id(a))

a = "1"

print("呼叫函式前:" + str(a))

stringchanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********元組**********")

def tuplechanged(a): # 元組:同一引用

print("呼叫函式時:", id(a))

a += ("合併兩元組",)

print("重新賦值:", id(a))

a = ("1", "2")

print("呼叫函式前:" + str(a))

tuplechanged(a)

print(id(a))

print("呼叫函式後:" + str(a))

print("**********帶可變子元素的元組**********")

def tuple2changed(a): # 帶可變子元素的元組:同一引用

a[1][0] = "22"

print(id(a))

a = ("1", ["2"])

print("呼叫函式前:" + str(a))

tuple2changed(a)

print(id(a))

print("呼叫函式後:" + str(a))

得到:

**********列表**********

呼叫函式前:[1]

2268560182080

2268560182080

呼叫函式後:[2]

**********集合**********

呼叫函式前:

2268560447296

2268560447296

呼叫函式後:

**********字典**********

呼叫函式前:

2268560123776

2268560123776

呼叫函式後:

**********數值**********

呼叫函式前:1

呼叫函式時: 2268558420272

重新賦值: 2268558420304

2268558420272

呼叫函式後:1

**********字串**********

呼叫函式前:1

呼叫函式時: 2268560076912

重新賦值: 2268560559408

2268560076912

呼叫函式後:1

**********元組**********

呼叫函式前:('1', '2')

呼叫函式時: 2268560166464

重新賦值: 2268560558592

2268560166464

呼叫函式後:('1', '2')

**********帶可變子元素的元組**********

呼叫函式前:('1', ['2'])

2268560559232

2268560559232

呼叫函式後:('1', ['22'])

python中的引數傳遞

我們知道c語言中只有值傳遞 位址也是值 c 中額外有引用傳遞,那麼在python中的引數是如何傳遞的呢,要理解這一點,我們就需要知道python傳遞的到底是什麼,在c c 中有變數的概念,但是在python中是沒有這個概念的,在python的世界中,萬物皆物件,我們可以通過名字來操控這些物件,先來解...

python中的引數傳遞

begin 前面在介紹python的六大資料型別的時候提到根據資料可變和不可變進行的資料型別分類 python3 的六個標準資料型別中 不可變資料 3 個 number 數字 string 字串 tuple 元組 可變資料 3 個 list 列表 dictionary 字典 set 集合 pytho...

python 引數傳遞 Python 引數傳遞

python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...