創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
武岡ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!這篇文章主要介紹python拷貝對象的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
python中。進行函數(shù)參數(shù)傳遞或者返回值時,假設(shè)是一般的變量,會拷貝傳遞。假設(shè)是列表或字典則是引用傳遞。那python怎樣對列表和字典進行拷貝傳遞呢:標準庫的copy模塊提供了兩個方法:copy和deepcopy方法。
copy.copy 淺拷貝 僅僅拷貝父對象,不會拷貝對象的內(nèi)部的子對象。
copy.deepcopy 深拷貝 拷貝對象及其子對象。
你想復(fù)制一個對象?因為在Python中,無論你把對象做為參數(shù)傳遞,做為函數(shù)返回值,都是引用傳遞的。
何謂引用傳遞,我們來看一個C++交換兩個數(shù)的函數(shù):
void swap(int &a,int &b) { int temp; temp= a; a= b; b= temp; }
這個例子就是一個引用傳遞的例子!目的是說明一下概念:引用傳遞的意思就是說你傳遞的是對象的引用,對這個引用的修改也會導(dǎo)致原有對象的改變。學(xué)過C/C++的朋友們都知道,在交換2個數(shù)的時候,如果自己實現(xiàn)一個swap函數(shù),需要傳遞其引用或者指針。
Python直接使用引用傳遞,多方便啊,你還要吐槽什么?你又想過我不想改變原對象的情況嗎?如果有,那么看這里!
假設(shè)我現(xiàn)在有一個list,叫做l1,我現(xiàn)在需要一份l1的拷貝,如果我直接使用諸如l2 = l1的方式,然后我對l2進行一系列的修改,會等價于我對l1直接做修改,這可不是我想要的!如:
l1= [1,2] l2= l1 l2.append(3) print l1 print l2 # l1 = [1, 2, 3], l2 = [1, 2, 3]
這就是Python引用傳遞造成的,也就是說l1和l2屬于同一list對象,那么如何才能得到一份不同的對象呢?這不是so easy嘛,用切片撒,比如:
l1= [1,2] l2= l1[:] l2.append(3) # l1 = [1, 2], l2 = [1, 2, 3]
是的,目的達到了,別介,你確定這樣一定行?讓我們看看一個更復(fù)雜的情況:
l1 = [[1, 2], 3] l2 = l1[:] l2.append(4) # l1 = [[1, 2], 3], l2 = [[1, 2], 3, 4] l2[0].append(5) # l1 = [[1, 2, 5], 3], l2 = [[1, 2, 5], 3, 4]
啊哈,貌似出問題了哈,這個可不是我們需要的!怎么辦呢?好了,進入今天的正題,Python中的copy模塊!
import copy
如果你希望復(fù)制一個容器對象,以及它里面的所有元素(包含元素的子元素),使用copy.deepcopy,這個方法會消耗一些時間和空間,不過,如果你需要完全復(fù)制,這是唯一的方法。上面我們提到的切片的方式,等價于copy模塊中的copy函數(shù)。
上面拷貝的操作變得so easy了:
l1= [[1,2],3] l2= copy.copy(l1) l3= copy.deepcopy(l1) l2.append(4) l2[0].append(5) l3[0].append(6) # l1 = [[1, 2, 5], 3], l2 = [[1, 2, 5], 3, 4], l3 = [[1, 2, 6], 3]
相關(guān)說明:
copy(x) Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. deepcopy(x, memo=None, _nil=[]) Deep copy operation on arbitrary Python objects. See the module's __doc__ string for more info.
以上是python拷貝對象的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!