驗證函式接收不定長引數時的拷貝型別

2021-10-04 22:34:49 字數 1534 閱讀 9274

本人使用windows的環境來驗證的該問題,環境配置如下:

在學習python3的函式的時候遇到了乙個待考證的問題,在對函式進行不定長引數定義後,呼叫該函式傳入引數時,函式會對引數的值進行拷貝。這裡有個疑問就是形參拷貝實參時是什麼型別的拷貝?如果是淺拷貝的話,那麼實參變數中可變對線的值發生改變的話是否也會引起傳入函式的值發生改變。

假如定義乙個函式以字典的方式接收不定長引數。傳入函式的實參中包含對變數的二次引用。

def copy_variable(key, *value1):

print(f'該函式的key:')

print(value1)

other = ['number', 1234567]

dict1 = dict1 = ['test', 'bob_hou', other]

copy_variable('test', dict1)

該函式在被呼叫的過程中對dict1的拷貝是否是深拷貝呢?如何驗證這個過程。

構造乙個生成器來在呼叫函式的過程中二次修改實參other的值,檢視傳入函式的實參資料是否修改。

**如下:

other = ['number', 1234567]

dict1 = ['test', 'bob_hou', other]

print(f'當前欄位的值為')

def copy_variable(key, *value1):

print(f'該函式的key:')

a = 1

print(value1)

yield a

print(value1)

yield

g = copy_variable('test', dict1)

a = next(g)

print(a)

other = ['number', 1]

dict1 = ['test', 'bob_hou', other]

next(g)

print(f'當前欄位的值為')

結果如下:

# 初始值

當前欄位的值為['test', 'bob_hou', ['number', 1234567]]

# 函式第一次呼叫

該函式的key:test

(['test', 'bob_hou', ['number', 1234567]],)

# 使用next呼叫生成器

1# 緊接著函式體內yield後執行結果

(['test', 'bob_hou', ['number', 1234567]],)

當前欄位的值為['test', 'bob_hou', ['number', 1]]

可以看到在生成器執行到函式中print(value1)後對實參進行了二次呼叫。但是輸出的值還是原先實參傳入到函式的值。所以對不定長引數的傳參過程是深拷貝。

不定長引數函式的實現

原始碼如下 int sum int num,return ret int main int argc,char argv 所謂不定長引數,就是函式的形參數量不定,型別也可能是不定的。我們把像上面的函式sum中如 int num 這樣的引數叫做 有名引數 後面用 代表的都是 匿名引數 有名引數是可以在...

函式之不定長引數和預設引數

在定義函式的時候 某個形參有自己的預設值 初始值 在定義函式的時候 如果某個形參是預設引數 那麼後面的形參都應該為預設引數 如果乙個形參為預設引數 那麼在呼叫函式的時候 可以不傳實參那麼缺省會使用形參的初始值 預設值 如果在預設引數的位置傳遞了乙個實參 那麼實參的值 會覆蓋預設引數的值 def my...

python3 函式 不定長引數 不定參

第一種不定長引數 args args 稱為不定長引數,只能放在形參的最後位置,返回的是乙個元組 def num a,b,args print a print b print args num 11,22 返回結果 1122 33,55會放在元組args中 num 11,22,33,55 返回結果 1...