成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

【編程語(yǔ)言】Python 的參數(shù)傳遞、返回值、淺拷貝、深拷貝

PascalXie / 2146人閱讀

摘要:作者本文原載于,不允許轉(zhuǎn)載的參數(shù)傳遞的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象數(shù)字字符元組等的參數(shù),更類(lèi)似值傳遞對(duì)于可變對(duì)象列表字典等,更類(lèi)似引用傳遞。

作者:LogM

本文原載于 https://segmentfault.com/u/logm/articles ,不允許轉(zhuǎn)載~

1. Python 的參數(shù)傳遞

Python的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象(數(shù)字、字符、元組等)的參數(shù),更類(lèi)似值傳遞;對(duì)于可變對(duì)象(列表、字典等),更類(lèi)似引用傳遞。

def fun1(n):
    print(n)   # n在沒(méi)修改前,指向的地址和main函數(shù)中n指向的地址相同
    n = 20     # n在修改后,指向的地址發(fā)生改變,相當(dāng)于新建了一個(gè)值為20的參數(shù)n

def fun2(l):
    print(l)   # l在沒(méi)修改前,指向的地址和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的返回值,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象(數(shù)字、字符、元組等)的參數(shù),更類(lèi)似值傳遞;對(duì)于可變對(duì)象(列表、字典等),更類(lèi)似引用傳遞。

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]}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44130.html

相關(guān)文章

  • 探索php和python下對(duì)象拷貝拷貝

    摘要:對(duì)于而言,情況可能會(huì)有點(diǎn)小復(fù)雜,因?yàn)橐磺薪詾閷?duì)象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們?cè)谥?,?duì)象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時(shí)值完全復(fù)制,完全的copy,對(duì)其中一個(gè)作出改變,不會(huì)影響另一個(gè) ??淺拷貝:賦值時(shí),引用賦值,相當(dāng)于取了一個(gè)別名。對(duì)其中一個(gè)修改,會(huì)影響另一個(gè) ??對(duì)于PHP而言,= 賦值時(shí),普通對(duì)象是深拷貝,但對(duì)對(duì)象來(lái)說(shuō)...

    shinezejian 評(píng)論0 收藏0
  • 探索php和python下對(duì)象拷貝拷貝

    摘要:對(duì)于而言,情況可能會(huì)有點(diǎn)小復(fù)雜,因?yàn)橐磺薪詾閷?duì)象,所以的普通賦值深拷貝和淺拷貝之間都是有細(xì)微區(qū)別的。二下的他們?cè)谥?,?duì)象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時(shí)值完全復(fù)制,完全的copy,對(duì)其中一個(gè)作出改變,不會(huì)影響另一個(gè) ??淺拷貝:賦值時(shí),引用賦值,相當(dāng)于取了一個(gè)別名。對(duì)其中一個(gè)修改,會(huì)影響另一個(gè) ??對(duì)于PHP而言,= 賦值時(shí),普通對(duì)象是深拷貝,但對(duì)對(duì)象來(lái)說(shuō)...

    wizChen 評(píng)論0 收藏0
  • python拷貝拷貝

    摘要:之前關(guān)于的作用域賦值參數(shù)傳遞,我們接連談了幾篇文章全菊變量和菊部變量關(guān)于函數(shù)參數(shù)傳遞,人都錯(cuò)了可變對(duì)象與不可變對(duì)象今天我們依然要就相關(guān)話(huà)題繼續(xù)下去。這是由于它們是不可變對(duì)象,不存在被修改的可能,所以拷貝和賦值是一樣的。 之前關(guān)于 Python 的作用域、賦值、參數(shù)傳遞,我們接連談了幾篇文章: 全菊變量和菊部變量 關(guān)于函數(shù)參數(shù)傳遞,80%人都錯(cuò)了 可變對(duì)象與不可變對(duì)象 今天我們依然要...

    ideaa 評(píng)論0 收藏0
  • 精選50道Python面試題,快來(lái)看看你已經(jīng)掌握了多少道吧

    摘要:從存儲(chǔ)的字符串表示中檢索原始對(duì)象的過(guò)程稱(chēng)為。這稱(chēng)為命名空間。如果需要八進(jìn)制或十六進(jìn)制表示,請(qǐng)使用內(nèi)置函數(shù)或。和有什么區(qū)別返回對(duì)象,而返回列表,并使用相同的內(nèi)存,無(wú)論范圍大小是多少。它提供了靈活性,并允許開(kāi)發(fā)人員為他們的項(xiàng)目使用正確的工具。 ...

    zzir 評(píng)論0 收藏0
  • ES6 變量聲明與賦傳遞、拷貝拷貝詳解

    摘要:變量聲明與賦值值傳遞淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代開(kāi)發(fā)語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。變量聲明在中,基本的變量聲明可以用方式允許省略,直接對(duì)未聲明的變量賦值。按值傳遞中函數(shù)的形參是被調(diào)用時(shí)所傳實(shí)參的副本。 ES6 變量聲明與賦值:值傳遞、淺拷貝與深拷貝詳解歸納于筆者的現(xiàn)代 JavaScript 開(kāi)發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文首先介紹 ES6 中常用的三種變量聲明方式,然后討論了...

    snowLu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<