Python的复制分为浅复制和深复制。
浅复制指只复制父对象,不复制内部的子对象。例如list的copy方法、python的直接拷贝
深复制则复制父对象以及内部子对象。copy库的deepcopy方法以及dict的copy方法
浅复制一般用于复制Python内置类型。
例如:
a = 10
b = a
a = a**2
print(a)#a的值已经改变 100
print(b)#b的值没改变 10
但是,如果是复制自定义类型,浅复制没那么好用了
例如
class apple():#继承内部类型浅复制比较好用
def __init__(self,p):
self.p = p
def prize(self,n):
return self.p*n
a = apple(90)
b = a
print(a.p)# 90
print(a.prize(2)) # 180
a.p = 12
print(a.p) # 12
print(b.p) # 12
当a.p变成12之时,b.p也变成了12。其实,b.p只拷贝了a.p的引用,
b.p的值等于a.p的值。
但是深复制不会出现这种问题
示例
import copy
class apple():#继承内部类型浅复制比较好用
def __init__(self,p):
self.p = p
def prize(self,n):
return self.p*n
a = apple(90)
b = copy.deepcopy(a)
print(a.p)# 90
print(a.prize(2)) # 180
a.p = 12
print(a.p) # 12
print(b.p) # 90
这次a.p的值不等于b.p的值。如果要复制自定义类型的值,最好选用深复制。