本文實(shí)例講述了python中引用與復(fù)制用法。分享給大家供大家參考。具體分析如下:
在python中,任何不可變對(duì)象是傳值的,而可變對(duì)象是傳引用的。
不管是向函數(shù)傳遞參數(shù)或者是任何形式的對(duì)象復(fù)制來(lái)說(shuō),不可變對(duì)象(比如整數(shù),字符串)被真正復(fù)制,而可變對(duì)象只是復(fù)制了一個(gè)對(duì)他們的引用,即在內(nèi)存中只有一份對(duì)象,而引用兩份。
a=b 這樣的賦值,就會(huì)創(chuàng)建對(duì)b的引用,對(duì)于象數(shù)字和字符串這樣的不可變的對(duì)象,這種賦值實(shí)際是創(chuàng)建了b的一個(gè)副本
>>> a='hello'>>> b=a>>> id(a)29326432>>> id(b)29326432>>> b is aTrue>>> a=1000>>> b'hello'
對(duì)于可變對(duì)象,比如字典和列表,a和b引用的是同一個(gè)對(duì)象,修改其中任意一個(gè)變量都會(huì)影響到另一個(gè)。
>>> a=[1,2,3,4]>>> b=a>>> id(a)29280896>>> id(b)29280896>>> b[3]='ccccccccc'>>> a[1, 2, 3, 'ccccccccc']>>>
列表和字典這樣的容器對(duì)象,可以使用兩種賦值操作:淺復(fù)制和深復(fù)制。淺復(fù)制創(chuàng)建一個(gè)新對(duì)象,但它包含的是對(duì)原始對(duì)象中包含的項(xiàng)的引用。
比如下面的淺復(fù)制:
>>> a=[1,2,3,4,[9,0]]>>> b=a>>> a=[1,2,3,4,[9,0]]>>> b=list(a)>>> b is aFalse>>> b[0]=1000>>> b[1000, 2, 3, 4, [9, 0]] #注意,b修改了b[0]以后,對(duì)a沒(méi)有影響>>> a[1, 2, 3, 4, [9, 0]]>>> b[4][1]='cccc' #注意,b修改了 b[4][1]以后,對(duì)a有影響>>> b[1000, 2, 3, 4, [9, 'cccc']]>>> a[1, 2, 3, 4, [9, 'cccc']]
深復(fù)制將創(chuàng)建一個(gè)新對(duì)象,并且遞歸的復(fù)制它包含的所有對(duì)象,沒(méi)有內(nèi)置對(duì)象可以創(chuàng)建深復(fù)制,可以使用copy.deepcopy()函數(shù)完成。
>>> import copy>>> a=[1,2,3,[4,5]]>>> b=copy.deepcopy(a)>>> id(b)29582240 >>> id(a)29581840>>> a is bFalse>>> b[0]=1000>>> b[1000, 2, 3, [4, 5]] #注意修改了b[0]之后對(duì)a沒(méi)有影響>>> a[1, 2, 3, [4, 5]]>>> b[3][1]='gggg'>>> b[1000, 2, 3, [4, 'gggg']] #修改了 b[3][1]之后對(duì)a也沒(méi)有影響,這是和淺復(fù)制的區(qū)別>>> a[1, 2, 3, [4, 5]]
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選