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

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

新聞中心

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

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

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

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

二、copy方法的使用

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


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

如果我們改變了列表中的一個元素,另一個列表也會被改變。


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

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


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

三、deepcopy方法的使用

deepcopy方法的作用是返回一個深復(fù)制了原對象的新對象。上面的例子如果我們使用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]]

可以看到,兩個列表的所有元素都完全獨立,沒有互相影響。

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

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

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

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


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ù)制時修改了list2中子列表的元素,list1也會受到影響。解決這個問題的方法是使用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ù)合對象

使用深復(fù)制可以復(fù)制復(fù)合對象,這些對象由多個對象組成并且都是可變的。如果我們使用簡單的賦值,原對象和新對象仍然會相互影響。以下代碼演示了如何使用deepcopy對復(fù)合對象進行復(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語句可以刪除列表元素,但是如果我們只是使用淺復(fù)制,會出現(xiàn)以下問題:


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

可以看到,原列表也被修改了,因為del語句只是刪除了指向子元素的引用。如果我們使用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]]

可以看到,原列表沒有受到任何影響。


本文標題:創(chuàng)新互聯(lián)Python教程:Python中的copy.deepcopy
網(wǎng)址分享:http://www.5511xx.com/article/ccdpogh.html