浅拷贝:拷贝对象,但不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:拷贝对象,并且会连子对象的内存也全部(递归)拷贝一份,对子对象的修改不会影响源对象,使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。
import copy
class MobilePhone:
def __init__(self,cpu):
self.cpu = cpu
class CPU:
pass
c = CPU()
m = MobilePhone(c)
print("----浅拷贝-------")
m2 = copy.copy(m) #m2是新拷贝的另一个手机对象
print("m:",id(m))
print("m2:",id(m2))
print("m的cpu:",id(m.cpu))
print("m2的cpu:",id(m2.cpu)) #m2和m拥有了一样的cpu对象
print("----深拷贝--------")
m3 = copy.deepcopy(m)
print("m:",id(m))
print("m3:",id(m3))
print("m的cpu:",id(m.cpu))
print("m3的cpu:",id(m3.cpu)) #m3和m拥有不一样的cpu对象
#执行结果:
#----浅拷贝-------
#m: 1879267229360
#m2: 1879267228592
#m的cpu: 1879267229648
#m2的cpu: 1879267229648
#----深拷贝--------
#m: 1879267229360
#m3: 1879267222256
#m的cpu: 1879267229648
#m3的cpu: 1879267221968