這篇文章運用了實例代碼展示Python深拷貝和淺拷貝使用方法,代碼非常詳細,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。
在行唐等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站設計制作、成都網站建設 網站設計制作按需求定制網站,公司網站建設,企業(yè)網站建設,品牌網站建設,營銷型網站,成都外貿網站建設,行唐網站建設費用合理。
一、淺拷貝
所謂淺拷貝,指的是對于某個對象,雖然創(chuàng)建了與該對象具有相同值的另一個對象,但是,這兩個對象內部嵌套的對應子對象全都是同一個對象。簡單地說,外部進行了拷貝,內部沒有拷貝。
以下方式得到的拷貝都是淺拷貝:
● 切片操作[:]
● 調用列表、字典、集合的方法copy()
● 調用內置函數List()、dict()、set(4.
● 調用標準庫模塊copy中的函數copy()
import copy # 導入標準庫模塊copy L1 = [1,[1,2,3],6] L2 = L1.copy() # [1, [1, 2, 3], 6] 使用list.copy() L2 = L1[:] # [1, [1, 2, 3], 6] # 使用索引切片的方式 L2 = list(L1) # [1, 2, 3], 6] # 使用list()函數賦值 L2 = copy.copy(L1) # [1, [1, 2, 3], 6] # 調用標準庫模塊copy中的函數copy() # 通過打印L1和L2的id可以看出,L2只拷貝了L1的外部,形成了一個和L1具有相同值的對象 # L1和L2內部值的id全都相同,即引用的同一內存地址 print('L1_id:%d' % id(L1)) # L1_id:140024932419056 print('L2_id:%d' % id(L2)) # L2_id:140024932419456 print('L1[1]_id:%d' % id(L1[1])) # L1[1]_id:140024932419376 print('L2[1]_id:%d' % id(L2[1])) # L2[1]_id:140024932419376 print('id_L1[2] %d' % id(L1[2])) # id_L1[2] 9466624 print('id_L2[2] %d' % id(L2[2])) # id_L2[2] 9466624 # 淺拷貝,對于列表內部嵌套的可變類型對象,修改L1[1][1]值,L2[1][1]值也會跟著改變 # 實際上他們內部都引用著同一個內存id L1[1][1] = 5 print(L1) # [1, [1, 5, 3], 6] print(L2) # [1, [1, 5, 3], 6] print('L1[1]_id:%d' % id(L1[1])) # L1[1]_id:140024932419376 print('L2[1]_id:%d' % id(L2[1])) # L2[1]_id:140024932419376 # 淺拷貝,對于列表內部的不可變類型對象,修改L1[2], # 因為是不可變類型,那么會重新調用一個值給予引用,L2[2]因此不受影響 L1[2] = 8 print(L1) # [1, [1, 5, 3], 8] print(L2) # [1, [1, 5, 3], 6] print('id_L1[2] %d' % id(L1[2])) # id_L1[2] 9466688 print('id_L2[2] %d' % id(L2[2])) # id_L2[2] 9466624
二、深拷貝
所謂深拷貝,指的是:對于某個對象,創(chuàng)建與該對象具有相同值的另一個對象,同時,這兩個對象內部嵌套的對應可變子對象全都不是同一個對象。簡單地說,外部和內部都進行了拷貝。
深拷貝的方法:
● 調用標準庫模塊copy中的函數deepcopy()
import copy # 導入標準庫模塊copy L1 = [1,[1,2,3],6] L2 = copy.deepcopy(L1) # [1, [1, 2, 3], 6] # 通過打印L1和L2的內存地址可以看出,其外部進行拷貝,L2是和L1具有相同值的新對象 # 對于內部嵌套的可變類型對象,L1[1]和L2[1]內存地址并不相同 # 對于內部嵌套的不可變類型對象,L1[2]和L2[2]內存地址相同,引用的同一內存地址 print('L1_id:%d' % id(L1)) # L1_id:139984573203792 print('L2_id:%d' % id(L2)) # L2_id:139984573203952 print('L1[1]_id:%d' % id(L1[1])) # L1[1]_id:139984573203472 print('L2[1]_id:%d' % id(L2[1])) # L2[1]_id:139984573204512 print('id_L1[2] %d' % id(L1[2])) # id_L1[2] 9466624 print('id_L2[2] %d' % id(L2[2])) # id_L2[2] 9466624 # 深拷貝,列表內部嵌套的可變類型對象,修改L1[1][1] 為5不影響L2[1][1]的值, # 深拷貝是將L1和L2內部可變類型對象的值引用的內存地址分開來 L1[1][1] = 5 print(L1) # [1, [1, 5, 3], 6] print(L2) # [1, [1, 2, 3], 6] print('L1[1]_id:%d' % id(L1[1])) # L1[1]_id:139984573203472 print('L2[1]_id:%d' % id(L2[1])) # L2[1]_id:139984573204512 # 深拷貝,對于列表內部不可變類型對象,修改L1[2] = 8,因為是不可變類型,所以將L1[2]重新賦值引用,不影響L2[2] L1[2] = 8 print(L1) # [1, [1, 5, 3], 8] print(L2) # [1, [1, 2, 3], 6] print('id_L1[2] %d' % id(L1[2])) # id_L1[2] 9466688 print('id_L2[2] %d' % id(L2[2])) # id_L2[2] 9466624
如果你能讀到這里,恭喜你已經對Python深拷貝和淺拷貝有了從實踐層面最深刻的體會了。如果想閱讀更多相關內容的文章,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!
網頁名稱:Python深拷貝和淺拷貝使用方法
網頁鏈接:http://chinadenli.net/article46/ppioeg.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站制作、網站內鏈、微信小程序、建站公司、做網站、App開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯