python的深拷貝和淺拷貝

來源:互聯網
上載者:User

標籤:技術分享   span   恢複   .com   back   淺拷貝   深拷貝   style   png   

---恢複內容開始---

數字和字串                                                                                                                                                                                                                              

數字和字串中的記憶體都指向同一個地址,所以深拷貝和淺拷貝對於他們而言都是無意義的

 

import copya = 123                #賦值print(id(a))           #輸出儲存變數的地址b = aprint(id(b))b = copy.copy(a)       #淺拷貝print(id(b))c = copy.deepcopy(a)  #深拷貝print(id(c))

 

 

淺拷貝                                                                                                                                                                                                                                      

對於字典 元組 和列表來說,進行淺拷貝和深拷貝時,記憶體的地址是不同的

淺拷貝只會拷貝記憶體中的第一層資料

import copydic = {‘key1‘:123,‘key2‘:[123,456]}            #建立一個字典嵌套列表print(id(dic[‘key1‘]))print(id(dic[‘key2‘]))print(id(dic[‘key2‘][0]))                      #列印列表中的地址print("\n")new_dic = copy.copy(dic)                       #使用淺拷貝賦值 print("*",id(new_dic[‘key1‘]))print("*",id(new_dic[‘key2‘]))print("*",id(new_dic[‘key2‘][0]))


發現記憶體中地址的值都是完全相同

 

深拷貝                                                                                                                                                                                                                                      

而對於深拷貝來說將會把所有資料重新建立

import copydic = {‘key1‘:123,‘key2‘:[123,456]}            #建立一個字典嵌套列表print(id(dic[‘key1‘]))print(id(dic[‘key2‘]))print(id(dic[‘key2‘][0]))                      #列印列表中的地址print("\n")new_dic = copy.deepcopy(dic)                       #使用深拷貝賦值 print("*",id(new_dic[‘key1‘]))print("*",id(new_dic[‘key2‘]))print("*",id(new_dic[‘key2‘][0]))

 

深淺拷貝的應用                                                                                                                                                                                                                           

 

在淺拷貝中 當改變拷貝對象的值 被拷貝對象的值也會隨之改變

import copydic = {‘key1‘:123,‘key2‘:[123,456]}            #建立一個字典嵌套列表print(dic[‘key2‘][0])                          #列印列表中的地址print("\n")new_dic = copy.deepcopy(dic)                       #使用淺拷貝賦值 new_dic[‘key2‘][0] = 789                       #改變字典中列表的值print(dic[‘key2‘][0])print((new_dic[‘key2‘][0]))

 

當不想改變被拷貝的值時 應該使用深拷貝

import copydic = {‘key1‘:123,‘key2‘:[123,456]}            #建立一個字典嵌套列表print(dic[‘key2‘][0])                          #列印列表中的地址print("\n")new_dic = copy.deepcopy(dic)                       #使用深拷貝賦值 new_dic[‘key2‘][0] = 789                       #改變字典中列表的值print(dic[‘key2‘][0])print((new_dic[‘key2‘][0]))

 

 

 

 淺拷深拷貝深拷貝貝淺拷貝

 

---恢複內容結束---

python的深拷貝和淺拷貝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.