Python 中的參數(shù)傳遞、返回值、淺拷貝、深拷貝
1. Python 的參數(shù)傳遞
Python的參數(shù)傳遞,無法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象(數(shù)字、字符、元組等)的參數(shù),更類似值傳遞;對(duì)于可變對(duì)象(列表、字典等),更類似引用傳遞。
def fun1(n): print(n) # n在沒修改前,指向的地址和main函數(shù)中n指向的地址相同 n = 20 # n在修改后,指向的地址發(fā)生改變,相當(dāng)于新建了一個(gè)值為20的參數(shù)n def fun2(l): print(l) # l在沒修改前,指向的地址和main函數(shù)中l(wèi)指向的地址相同 l = [5,6,7,8,9] # l在修改后,指向的地址和main函數(shù)中l(wèi)指向的地址仍相同,此時(shí)main函數(shù)中l(wèi)的值也會(huì)改變 if __name__=="__main__": n = 10 l = [1,2,3,4,5] fun1(n) fun2(l) print(n) # n的值還是10 print(l) # l的值在fun2()中已經(jīng)被改變
2. Python 的返回值
Python的返回值,無法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象(數(shù)字、字符、元組等)的參數(shù),更類似值傳遞;對(duì)于可變對(duì)象(列表、字典等),更類似引用傳遞。
str1 = 'hi' l1 = [1,2,3,4,5] def fun1(): return str1 def fun2(): return l1 str2 = fun1() # 此時(shí),str1 和 str2 的指向地址是相同的 str2 = 'hello' # 修改后,str2 指向的地址發(fā)生改變,相當(dāng)于新建了一個(gè)值為`hello`的變量 l2 = fun2() # 此時(shí),l1 和 l2 的指向地址是相同的 l2 = [6,7,8,9] # 修改后,l2 指向的地址仍相同,修改 l2 會(huì)影響到 l1
3. Python 的淺拷貝和深拷貝
對(duì)于不可變對(duì)象(數(shù)字、字符、元組等),直接賦值的結(jié)果和深拷貝一致;對(duì)于可變對(duì)象(列表、字典等),直接賦值、淺拷貝、深拷貝結(jié)果不同。
# 不可變對(duì)象(數(shù)字、字符、元組等)的例子
a = 100
b = a
b = 30
print('a: ', a)
print('b: ', b)
# 結(jié)果:
# a = 100
# b = 30
# 可變對(duì)象(列表、字典等)的例子
import copy
dict1 = {1:1, 'user':'test', 'num':[1, 2, 3]}
dict2 = dict1 # 直接賦值,兩個(gè)字典指向地址一致
dict3 = dict1.copy() # 淺拷貝,只拷貝到原對(duì)象
dict4 = copy.deepcopy(dict1) # 深拷貝,除了拷貝原對(duì)象,也會(huì)拷貝子對(duì)象
dict1[1] = 11
dict1['user'] = '123'
dict1['num'].remove(1)
print('原字典修改后:',dict1)
print('直接賦值:',dict2)
print('淺拷貝:',dict3)
print('深拷貝:',dict4)
# 結(jié)果
# 原字典修改后:{1:11,'user': '123', 'num': [2, 3]}
# 直接賦值:{1:11,'user': '123', 'num': [2, 3]}
# 淺拷貝:{1:1,'user': 'test', 'num': [2, 3]}
# 深拷貝:{1:1,'user': 'test', 'num': [1, 2, 3]}
總結(jié)
以上所述是小編給大家介紹的Python 中的參數(shù)傳遞、返回值、淺拷貝、深拷貝,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
python對(duì)文件目錄的操作方法實(shí)例總結(jié)
這篇文章主要介紹了python對(duì)文件目錄的操作方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)文件目錄相關(guān)的遍歷、刪除、移動(dòng)、查找等操作技巧,需要的朋友可以參考下2019-06-06
使用Python實(shí)現(xiàn)橋接模式的代碼詳解
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它將抽象部分與其實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化,本文將給大家介紹如何使用Python實(shí)現(xiàn)橋接模式,需要的朋友可以參考下2024-02-02
Python列表轉(zhuǎn)換為Excel表格第一列的方法詳解
在數(shù)據(jù)處理和分析的過程中,我們經(jīng)常需要將Python中的數(shù)據(jù)結(jié)構(gòu)(如列表)導(dǎo)出到Excel表格中,本文為大家整理了Python列表轉(zhuǎn)換為Excel表格第一列的幾種方法,希望對(duì)大家有所幫助2024-11-11
python實(shí)現(xiàn)求兩個(gè)字符串的最長(zhǎng)公共子串方法
今天小編就為大家分享一篇python實(shí)現(xiàn)求兩個(gè)字符串的最長(zhǎng)公共子串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Python線程創(chuàng)建和終止實(shí)例代碼
這篇文章主要介紹了Python線程創(chuàng)建和終止實(shí)例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字
這篇文章主要介紹了python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

