成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖解Python中深淺拷貝(copy)

開發 后端
為了防止數據被修改,就需要在傳遞一個副本,即使副本被修改,也不會影響原數據的使用。為了生成這個副本,就產生了拷貝。今天就說一下Python中的深淺拷貝問題。

[[354981]]

在工作中,常涉及到數據的傳遞,在數據傳遞使用過程中,可能會發生數據被修改的問題。為了防止數據被修改,就需要在傳遞一個副本,即使副本被修改,也不會影響原數據的使用。為了生成這個副本,就產生了拷貝。今天就說一下Python中的深淺拷貝問題。

一、深淺copy

    1.  賦值運算 

  1. l1 = [1, 2, 3, [22, 33]]  
  2. l2 = l1  
  3. l1.append(666)  
  4. print(l1)  # [1, 2, 3, [22, 33], 666]  
  5. print(l2)  # [1, 2, 3, [22, 33], 666] 

圖解:

注意:l2 = l1是一個指向,是賦值,和深淺copy無關。

    2.  淺copy

其實列表是一個一個的槽位,每個槽位存儲的是該對象的內存地址 

  1. #例1. 給大列表添加元素  
  2. l1 = [1, 2, 3, [22, 33]]  
  3. l2 = l1.copy()  
  4. # 或者下面這種方式,也是淺copy  
  5. # import copy  
  6. l2 = copy.copy(l1)  
  7. l1.append(666) 
  8. print(l1)  # [1, 2, 3, [22, 33], 666]  
  9. print(l2)  # [1, 2, 3, [22, 33]]  
  10. #例2. 給小列表添加元素  
  11. l1 = [1, 2, 3, [22, 33]]  
  12. l2 = l1.copy()  
  13. l1[-1].append(666)  
  14. print(l1)  # [1, 2, 3, [22, 33, 666]]  
  15. print(l2)  # [1, 2, 3, [22, 33, 666]]、  
  16. 例3. 將l1列表中第一個元素改為6  
  17. l1 = [1, 2, 3, [22, 33]] 
  18. l2 = l1.copy()  
  19. l1[0] = 6  
  20. print(l1)  # [6, 2, 3, [22, 33]]  
  21. print(l2)  # [1, 2, 3, [22, 33]] 

圖解:

例1

例2

例3

小結:

淺copy:會在內存中新開辟一個空間,存放這個copy的列表,但是列表里面的內容還是沿用之前對象的內存地址。

    3.  深copy 

  1. import copy  
  2. l1 = [1, 2, 3, [22, 33]]  
  3. l2 = copy.deepcopy(l1)  
  4. l1.append(666)  
  5. print(l1)  # [1, 2, 3, [22, 33], 666]  
  6. print(l2)  # [1, 2, 3, [22, 33]] 

圖解:

本質如下圖:

但是python對深copy做了一個優化,將可變的數據類型在內存中重新創建一份,而不可變的數據類型則沿用之前的,所以內存中是下面這樣的:

小結:

深copy:會在內存中開辟新空間,將原列表以及列表里面的可變數據類型重新創建一份,不可變數據類型則沿用之前的。

為什么Python默認的拷貝方式是淺拷貝?

  •  時間角度:淺拷貝花費時間更少。
  •  空間角度:淺拷貝花費內存更少。
  •  效率角度:淺拷貝只拷貝頂層數據,一般情況下比深拷貝效率高。

總結:

  •  不可變對象在賦值時會開辟新空間。
  •  可變對象在賦值時,修改一個的值,另一個也會發生改變。
  •  深、淺拷貝對不可變對象拷貝時,不開辟新空間,相當于賦值操作。
  •  淺拷貝在拷貝時,只拷貝第一層中的引用,如果元素是可變對象,并且被修改,那么拷貝的對象也會發生變化。
  •  深拷貝在拷貝時,會逐層進行拷貝,直到所有的引用都是不可變對象為止。
  •  Python 有多種方式實現淺拷貝,copy模塊的copy 函數 ,對象的 copy 函數 ,工廠方法,切片等。
  •  大多數情況下,編寫程序時,都是使用淺拷貝,除非有特定的需求。
  •  淺拷貝的優點:拷貝速度快,占用空間少,拷貝效率高。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2023-05-12 08:11:58

JavaScriptJSON克隆

2020-10-12 06:33:18

Zero-Copy零拷貝CPU

2023-11-08 14:21:51

Python拷貝

2011-06-03 17:14:35

iphone Objective

2021-01-07 08:29:46

Java淺拷貝深拷貝

2009-12-03 17:43:38

Visual Stud

2022-09-26 09:01:23

JavaScript淺拷貝深拷貝

2020-09-17 14:04:32

拷貝

2024-11-28 10:40:26

零拷貝技術系統

2020-12-18 06:09:07

Java淺拷貝深拷貝

2016-11-23 19:09:39

javanetty

2024-12-12 09:51:03

2024-04-17 09:01:08

Python深拷貝淺拷貝

2024-12-11 12:00:00

C++拷貝

2010-03-30 18:31:17

Oracle Copy

2021-12-06 10:22:47

切片拷貝Python

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2023-05-17 08:42:46

深拷貝Golang

2021-09-10 07:41:06

Python拷貝Python基礎

2009-05-19 17:28:44

深拷貝淺拷貝clone()
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区视频在线观看 | 成人在线视频免费观看 | 亚洲国产成人精品女人 | 在线观看第一区 | 午夜免费看 | 福利av在线 | 一区二区三区欧美 | 美美女高清毛片视频免费观看 | 在线观看成年人视频 | 欧美成年人网站 | 久久成人精品视频 | 午夜精品在线观看 | 精品国产成人 | 国产精品成人在线播放 | 色婷婷精品国产一区二区三区 | 欧美性区 | 99久久精品国产一区二区三区 | 极品销魂美女一区二区 | 91精品国产综合久久久动漫日韩 | 一级黄色毛片免费 | 午夜精| 在线观看国产91 | 在线欧美视频 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 五月婷婷亚洲 | 九九国产 | 亚洲三级国产 | 在线视频三区 | 狠狠撸在线视频 | 亚洲欧美激情精品一区二区 | 亚洲天堂久久 | 欧美一区二区三区视频在线观看 | 一级做a爰片久久毛片 | 国产精品久久久久久久久久久久久久 | 国产黄色小视频在线观看 | 久久久久免费精品国产 | 国产精品看片 | 久久久不卡网国产精品一区 | 欧美一区二区激情三区 | 久久av.com | 男女视频在线观看网站 |