类的浅拷贝与深拷贝
-
基础介绍
from copy import copy,deepcopy # 浅拷贝 copy(x) # 深拷贝 deepcopy(x)
-
浅拷贝
浅拷贝会创建一个
新对象
,该新对象存储原始元素
的引用import copy class CPU: pass class Disk: pass class Computer: def __init__(self,Disk,CPU): self.Disk=Disk self.CPU=CPU disk=Disk() cpu=CPU() a=Computer(disk,cpu) b=copy.copy(a) print(a,a.Disk,a.CPU) print(b,b.Disk,b.CPU) # <__main__.Computer object at 0x016B0A18> <__main__.Disk object at 0x00ACE580> <__main__.CPU object at 0x00A9AF40> # <__main__.Computer object at 0x016F4310> <__main__.Disk object at 0x00ACE580> <__main__.CPU object at 0x00A9AF40>
-
深拷贝
- 在浅拷贝基础上拷贝子对象
浅拷贝与深拷贝区别
- 浅拷贝和深拷贝只有在可变对象才会生效,不可变对象的赋值、浅拷贝、深拷贝的效果都是一样的
- 浅拷贝会将对象复制生成一个新对象,但新对象任然存储原始对象的引用,当原始对象时可变对象,然后修改它的值时,新旧对象会同时改变
- 深拷贝不仅会将对象复制生成一个新对象,且所有原始对象都会复制生成新对象,及时原始对象时可变对象,新对象存储的对象引用也是新的,所以改变旧对象的可改变对象时,不会影响新对象