Python 入门笔记23——对象的浅拷贝和深拷贝
-
变量的赋值操作
只是形成两个变量,实际还是指向同一个对象。 -
浅拷贝
Python 拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。 -
深拷贝
使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对象 所有的子对象也不同。
代码示例:
#测试对象的浅拷贝、深拷贝
import copy
class MobilePhone:
def __init__(self,cpu,screen):
self.cpu = cpu
self.screen = screen
class CPU:
def calculate(self):
print("算你个12345")
print("cpu对象:",self)
class Screen:
def show(self):
print("显示一个好看的画面,亮瞎你的钛合金大眼")
print("screen对象:",self)
#测试变量赋值
c1 = CPU()
c2 = c1
print(c1)
print(c2)
#测试浅复制
print("测试浅复制....")
s1 = Screen()
m1 = MobilePhone(c1,s1)
m2 = copy.copy(m1)
print(m1,m1.cpu,m1.screen)
print(m2,m2.cpu,m2.screen)
#测试深复制
print("测试深复制....")
m3 = copy.deepcopy(m1)
print(m1,m1.cpu,m1.screen)
print(m3,m3.cpu,m3.screen)
运行结果:
<__main__.CPU object at 0x0000017F2BE11850>
<__main__.CPU object at 0x0000017F2BE11850>
测试浅复制....
<__main__.MobilePhone object at 0x0000017F2BB4B1F0> <__main__.CPU object at 0x0000017F2BE11850> <__main__.Screen object at 0x0000017F2BB4B790>
<__main__.MobilePhone object at 0x0000017F2BC5C460> <__main__.CPU object at 0x0000017F2BE11850> <__main__.Screen object at 0x0000017F2BB4B790>
测试深复制....
<__main__.MobilePhone object at 0x0000017F2BB4B1F0> <__main__.CPU object at 0x0000017F2BE11850> <__main__.Screen object at 0x0000017F2BB4B790>
<__main__.MobilePhone object at 0x0000017F2CDED9D0> <__main__.CPU object at 0x0000017F2CDEDEB0> <__main__.Screen object at 0x0000017F2CDEDF10>