在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ 請(qǐng)問(wèn)Python函數(shù)的形參,為什么有時(shí)“淺拷貝”有時(shí)“深拷貝”?

請(qǐng)問(wèn)Python函數(shù)的形參,為什么有時(shí)“淺拷貝”有時(shí)“深拷貝”?

請(qǐng)問(wèn)Python函數(shù)的形參,為什么有時(shí)可以改變、有時(shí)不可以?原諒我不知道該怎么形容,所以借用了“深淺拷貝”這樣的概念…

def func(x,y,l):
    x = y+1
    l.append(0)
    
if "__main__" == __name__:
    x=10; y=10; l=[3,2,1]
    func (x,y,l)
    print (x,y, l)

請(qǐng)問(wèn):運(yùn)行函數(shù)func之后,為什么x和y的值沒(méi)有變化、而l變了?
1 有沒(méi)有辦法讓l也像x和y那樣不變、運(yùn)行函數(shù)之后直接釋放?
2 有沒(méi)有辦法讓x和y也像l那樣改變?return嗎?

謝謝了先!

回答
編輯回答
練命

首先需要理解兩點(diǎn),1賦值(=)是對(duì)地址的應(yīng)用;2int為可變不對(duì)象,list為可變對(duì)象。這里簡(jiǎn)單說(shuō)說(shuō)可變和不可變,不可變對(duì)象的值改變了,引用的地址就改變了;可變對(duì)象的值改變,但是引用的地址不變,x和y的重新賦值會(huì)導(dǎo)致x,y指向其他地址,但是l一直指向同一個(gè)地址。想要看關(guān)于可變和不可變的詳細(xì)介紹,鏈接https://zhuanlan.zhihu.com/p/...

問(wèn):“為什么x和y的值沒(méi)有變化、而l變了?”
x=10,y=10,只是對(duì)“10”的同一個(gè)引用,x和y函數(shù)中的x重新賦值,指向地址id(x)已經(jīng)改變,而l指向地址不變,

問(wèn):“有沒(méi)有辦法讓l也像x和y那樣不變、運(yùn)行函數(shù)之后直接釋放?”
不能,只能把這個(gè)元素從list中刪除掉

問(wèn):”有沒(méi)有辦法讓x和y也像l那樣改變?return嗎?“
需要給x,y重新賦值,下面代碼只是對(duì)x

def func(x, y, l):
    x = y + 1
    l.append(0)
    return x, l
if "__main__" == __name__:
    x = 10;
    y = 10;
    l = [3, 2, 1]
    x, l = func(x, y, l)
    print (x, y, l)
2018年8月19日 21:59