python3下關於copy和deepcopy中的區別

     很多人在學習python3的時候,在字典部分copy和deepcopy感到很困惑,現在針對這兩個方法進行區分,即一種是淺複製(copy),一種是深度複製(deepcopy)。

開頭先下個結論

  • 我們日常所說的複製(自己在電腦硬盤上的複製)就是深複製(deepcopy),即將被複制對象完全再複製一遍作爲獨立的新個體單獨存在。所以改變原有被複制對象不會對已經複製出來的新對象產生影響。 

  • 而淺複製(copy)並不會產生一個獨立的對象單獨存在,他只是將原有的數據塊打上一個新標籤,所以當其中一個標籤指向的數據塊就會發生變化,另一個標籤也會隨之改變。這就和我們尋常意義上的複製有所不同了。

    字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響,但是當添加,刪除等修改操作的時候,兩者之間會相互影響

廢話不多,上代碼示例吧:

代碼如下:


from copy import deepcopy

d = {}

d["names"] = ["Alfred","Bertrand"]

b = d.copy()

b["names"] = "bob"

# 字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響

print("#字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響")

print(b)

print(d)

c = d.copy()

dc = deepcopy(d)

# 字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。

print("#字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。")

d["names"].append("Clive")

print(d)

print(c)

#deepcopy深度複製,在這裏我理解的是完全複製然後變成一個新的對象,

# 複製的對象和被複制的對象沒有任何關係,彼此之間無論怎麼改變都相互不影響。

print("dc是深度copy(deepcopy):")

print(dc)

結果:

#字典數據類型的copy函數,當簡單的值替換的時候,原始字典和複製過來的字典之間互不影響

{'names': 'bob'}

{'names': ['Alfred', 'Bertrand']}

#字典數據類型的copy函數,但是當添加,刪除等修改操作的時候,兩者之間會相互影響。

{'names': ['Alfred', 'Bertrand', 'Clive']}

{'names': ['Alfred', 'Bertrand', 'Clive']}

dc是深度copy(deepcopy):

{'names': ['Alfred', 'Bertrand']}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章