1.淺拷貝
情況1的例項如下:
import copy
a = [1, 2]
b = [3, 4]
c = [a, b] # 注意這裡的c就是乙個可變物件!
d = copy.copy(c)
print("變數c:", c)
print("----------------------------------")
print("變數d:", d)
結果:
變數c: [[1, 2], [3, 4]]
----------------------------------
變數d: [[1, 2], [3, 4]]
原因分析:需要拷貝的物件c是乙個list,即可變物件。因為c的最外層是[a,b]。因此在執行淺拷貝時,僅僅把最外層拷貝過來,而裡面的值沒有拷貝過來。
情況2的例項如下:
import copy
a = [1, 2]
b = [3, 4]
c = (a, b) # 注意這裡的c就是乙個不可變物件!
d = copy.copy(c)
print("變數c:", c)
print("----------------------------------")
print("變數d:", d)
結果:
變數c: ([1, 2], [3, 4])
----------------------------------
變數d: ([1, 2], [3, 4])
原因分析:因為c = (a,b),c是乙個元組tuple,即c的最外層是乙個不可變物件。當d在進行淺拷貝操作時,直接引用c的位址,不會再為d開闢新的位址空間。
2.深拷貝
情況1例項如下:
import copy
a = [1, 2] # a是可變物件
b = copy.deepcopy(a)
print("變數a:", a)
print("----------------------------------")
print("變數b:", b)
結果:
變數a: [1, 2]
----------------------------------
變數b: [1, 2]
情況2例項如下:
import copy
a = [1, 2]
b = [3, 4]
c = (a, b) # 注意這裡外層的c就是乙個不可變物件!但是裡面的a和b都是可變物件!
d = copy.deepcopy(c)
print("變數c:", c)
print("----------------------------------")
print("變數d:", d)
結果:
變數c: ([1, 2], [3, 4])
----------------------------------
變數d: ([1, 2], [3, 4])
情況3例項如下:
import copy
a = (1, 2)
b = (3, 4)
c = (a, b) # 注意這裡外層的c就是乙個不可變物件!但是裡面的a和b也都是不可變物件!
d = copy.deepcopy(c)
print("變數c:", c)
print("----------------------------------")
print("變數d:", d)
結果:
變數c: ((1, 2), (3, 4))
----------------------------------
變數d: ((1, 2), (3, 4))
原因分析:因為c = (a,b),c是乙個元組tuple,即c的最外層是乙個不可變物件;同時,裡面的a和b也是元組物件,不可變物件。當d在進行深拷貝操作時,直接引用c的位址,不會再為d開闢新的位址空間,與淺拷貝的第二種情況一樣。
python 中的拷貝 淺拷貝與深拷貝
0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...
python中淺拷貝與深拷貝
淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...
python中的深拷貝與淺拷貝
在python中拷貝預設為淺拷貝,因為占用時間和記憶體交少 淺拷貝 num list1 1 2,3 1,2,3 4,5 6,7 8,9 num list2 num list1.copy print before print num list1 print num list2 num list2 2 ...