[toc]html
copy 淺複製,不會拷貝其子對象,修改子對象,將受影響
python
import copy a = [1, 2, 3] b = copy.copy(a) print("id a=", id(a)) # id a= 1669348705224 print("id b=", id(b)) # id b= 1669348161608 print("id a 0=", id(a[0])) # id a 0= 1586588704 print("id b 0=", id(b[0])) # id b 0= 1586588704 a[0] = "hello" print("new a=", a) # new a= ['hello', 2, 3] print("new b=", b) # new b= [1, 2, 3] b[0] = "world" print("new 2 a=", a) # new a= ['hello', 2, 3] print("new 2 b=", b) # new 2 b= ['world', 2, 3]
deepcopy 深複製,將拷貝其子對象,修改子對象,將不受影響
調試
import copy a = [1, 2, 3] b = copy.deepcopy(a) print("id a=", id(a)) # id a= 2760920581064 print("id b=", id(b)) # id b= 2760920037448 print("id a 0=", id(a[0])) # id a 0= 1586588704 print("id b 0=", id(b[0])) # id b 0= 1586588704 a[0] = "hello" print("new a=", a) # new a= ['hello', 2, 3] print("new b=", b) # new b= [1, 2, 3] b[0] = "world" print("new 2 a=", a) # new a= ['hello', 2, 3] print("new 2 b=", b) # new 2 b= ['world', 2, 3]
發現對於不可變對象,好比整數、字符串、元組、還有由這些不可變對象組成的集合對象,淺拷貝和深拷貝沒有區別,都是拷貝一個新對象code
二者的區別在於拷貝組合對象
,好比列表中還有列表,字典中還有字典或者列表的狀況時,淺拷貝只拷貝了外面的殼子,裏面的元素並無拷貝,而深拷貝則是把殼子和裏面的元素都拷貝了一份新的。htm
看一個例子:對象
import copy a = [0, [1, 2], 3] b = copy.copy(a) c = copy.deepcopy(a) c[1][0] = "hello" print("a=", a) # a= [0, [1, 2], 3] print("c=", c) # c= [0, ['hello', 2], 3] b[1][0] = "world" print("new a=", a) # new a= [0, ['world', 2], 3] print("new b=", b) # new b= [0, ['world', 2], 3]
小提示:字符串
能夠利用 python在線調試進行相關調試分析