python深淺拷貝

沐小熊發表於2018-12-04

一.深淺拷貝

1. = 沒有建立新物件, 只是把記憶體地址進行了複製

1 從上到下只有一個列表被建立
2 lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋"]
3 lst2 = lst1  # 並沒有產生新物件. 只是一個指向(記憶體地址)的賦值
4 print(id(lst1))
5 print(id(lst2))
6 
7 lst1.append("葫蘆娃")
8 print(lst1)
9 print(lst2)

 

2. 淺拷貝 lst.copy() 只拷貝第一層.

1 lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋"]
2 lst2 = lst1.copy()  # 拷貝, 抄作業, 可以幫我們建立新的物件, 和原來長的一模一樣, 淺拷貝
3 
4 print(id(lst1))
5 print(id(lst2))
6 
7 lst1.append("葫蘆娃")
8 print(lst1)
9 print(lst2)

 

 1 lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋",["長白山", "白洋澱", "黃鶴樓"]]
 2 lst2 = lst1.copy()  # 淺拷貝. 只拷貝第一次內容
 3 
 4 print(id(lst1))
 5 print(id(lst2))
 6 
 7 print(lst1)
 8 print(lst2)
 9 
10 lst1[4].append("葫蘆娃")
11 print(lst1)
12 print(lst2)

 

3. 深拷貝

import copy
copy.deepcopy() 會把物件內部的所有內容進行拷貝

 1 import copy
 2 lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋",["長白山", "白洋澱", "黃鶴樓"]]
 3 lst2 = copy.deepcopy(lst1)  # 深拷貝:物件內部的所有內容都要複製一份. 深度克隆(clone). 原型模式
 4 
 5 print(id(lst1))
 6 print(id(lst2))
 7 
 8 print(lst1)
 9 print(lst2)
10 
11 lst1[4].append("葫蘆娃")
12 print(lst1)
13 print(lst2)
科普為什麼要有深淺拷貝?
提高建立物件的速度
計算機中最慢的. 就是建立物件. 需要分配記憶體.
最快的方式就是二進位制流的形式進行復制. 速度最快

相關文章