日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Python教程:Python中的copy.deepcopy

一、copy模塊和深淺復(fù)制

在Python中,對(duì)象的賦值實(shí)際上是對(duì)象的引用,也就是說(shuō),兩個(gè)變量指向同一個(gè)對(duì)象。而有時(shí)候我們希望得到一個(gè)新的對(duì)象,它與原對(duì)象的值相同,但是在內(nèi)存中卻是獨(dú)立的,這時(shí)候就需要使用復(fù)制。Python的copy模塊提供了兩個(gè)函數(shù):copy和deepcopy。淺復(fù)制會(huì)創(chuàng)建一個(gè)新對(duì)象,但它只是原始對(duì)象的一個(gè)副本,如果原始對(duì)象的某個(gè)元素是對(duì)象引用,則新的對(duì)象的相應(yīng)元素也是該對(duì)象的引用。深復(fù)制會(huì)遞歸復(fù)制對(duì)象及其所有子對(duì)象。

十多年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)自上料攪拌車等多個(gè)行業(yè),擁有豐富的營(yíng)銷推廣經(jīng)驗(yàn)。

二、copy方法的使用

copy方法的作用是返回一個(gè)淺復(fù)制了原對(duì)象的新對(duì)象。拿一個(gè)列表作為例子:


list1 = [1, 2, [3, 4]]
list2 = list1.copy()

如果我們改變了列表中的一個(gè)元素,另一個(gè)列表也會(huì)被改變。


list2[0] = 5
print(list1, list2)    # [1, 2, [3, 4]], [5, 2, [3, 4]]

但是如果我們改變列表中的嵌套列表的元素,兩個(gè)列表不會(huì)互相影響。


list2[2][0] = 6
print(list1, list2)    # [1, 2, [6, 4]], [5, 2, [6, 4]]

三、deepcopy方法的使用

deepcopy方法的作用是返回一個(gè)深復(fù)制了原對(duì)象的新對(duì)象。上面的例子如果我們使用deepcopy:


import copy
list1 = [1, 2, [3, 4]]
list3 = copy.deepcopy(list1)

list3[2][0] = 6
print(list1, list3)    # [1, 2, [3, 4]], [1, 2, [6, 4]]

可以看到,兩個(gè)列表的所有元素都完全獨(dú)立,沒(méi)有互相影響。

四、深淺復(fù)制的應(yīng)用

使用深淺復(fù)制可以幫助我們避免修改原始對(duì)象,因此特別適用于以下場(chǎng)景:

1.復(fù)制不定長(zhǎng)的可變列表

以下代碼展示了如何復(fù)制不定長(zhǎng)度的可變列表,這個(gè)列表包含了兩個(gè)子元素:


import copy
list1 = [1, [2, 3], 4]
list2 = copy.copy(list1)
list2[1][0] = 5
print(list1, list2)    # [1, [5, 3], 4], [1, [5, 3], 4]

可以看出,當(dāng)我們使用淺復(fù)制時(shí)修改了list2中子列表的元素,list1也會(huì)受到影響。解決這個(gè)問(wèn)題的方法是使用deepcopy:


import copy
list1 = [1, [2, 3], 4]
list3 = copy.deepcopy(list1)
list3[1][0] = 5
print(list1, list3)    # [1, [2, 3], 4], [1, [5, 3], 4]

2.復(fù)制復(fù)合對(duì)象

使用深復(fù)制可以復(fù)制復(fù)合對(duì)象,這些對(duì)象由多個(gè)對(duì)象組成并且都是可變的。如果我們使用簡(jiǎn)單的賦值,原對(duì)象和新對(duì)象仍然會(huì)相互影響。以下代碼演示了如何使用deepcopy對(duì)復(fù)合對(duì)象進(jìn)行復(fù)制:


import copy
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

joe = Person('Joe', 30)
jane = Person('Jane', 25)
family1 = [joe, jane]
family2 = copy.deepcopy(family1)
family2[0].age = 35
print(family1[0].age, family2[0].age)    # 30, 35

3.刪除列表元素

在Python中使用del語(yǔ)句可以刪除列表元素,但是如果我們只是使用淺復(fù)制,會(huì)出現(xiàn)以下問(wèn)題:


import copy
list1 = [1, 2, [3, 4]]
list2 = list1.copy()
del list2[2][0]
print(list1, list2)    # [1, 2, [4]], [1, 2, [4]]

可以看到,原列表也被修改了,因?yàn)閐el語(yǔ)句只是刪除了指向子元素的引用。如果我們使用deepcopy:


import copy
list1 = [1, 2, [3, 4]]
list3 = copy.deepcopy(list1)
del list3[2][0]
print(list1, list3)    # [1, 2, [3, 4]], [1, 2, [4]]

可以看到,原列表沒(méi)有受到任何影響。


網(wǎng)頁(yè)題目:創(chuàng)新互聯(lián)Python教程:Python中的copy.deepcopy
網(wǎng)頁(yè)鏈接:http://m.5511xx.com/article/ccdpogh.html