[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在线调试进行相关调试分析