python笔记——类的赋值浅拷贝和深拷贝
Posted 联邦学习小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记——类的赋值浅拷贝和深拷贝相关的知识,希望对你有一定的参考价值。
变量的赋值操作
只是形成两个变量,实际上这两个变量指向同一个对象。
class CPU():
pass
class Disk():
pass
class Computer():
def __init__(self,cpu,disk):
self.cpu = cpu
self.disk = disk
#变量的赋值
cpu1 = CPU()
cpu2 = cpu1
#可以看到,变量执行赋值操作后,两个变量指向同一个对象。
print(cpu1) #<__main__.CPU object at 0x000001D77B43FF28>
print(cpu2) #<__main__.CPU object at 0x000001D77B43FF28>
浅拷贝
Python拷贝一般都是浅拷贝,所谓浅拷贝就是不拷贝对象包含的子对象内容。因此,源对象与拷贝对象会引用同一个子对象。
import copy
class CPU():
pass
class Disk():
pass
class Computer():
def __init__(self,cpu,disk):
self.cpu = cpu
self.disk = disk
disk = Disk()
cpu = CPU()
#disk和cpu便是computer的子对象
computer = Computer(cpu,disk)
#浅拷贝,computer的实例对象不同,但子对象disk和cpu是相同的
computer2 = copy.copy(computer)
print(computer,computer.cpu,computer.disk)
#<__main__.Computer object at 0x0000024DDBD86940> <__main__.CPU object at 0x0000024DDBD7FF28> <__main__.Disk object at 0x0000024DDBD7FCC0>
print(computer2,computer2.cpu,computer2.disk)
#<__main__.Computer object at 0x0000024DDBD86CF8> <__main__.CPU object at 0x0000024DDBD7FF28> <__main__.Disk object at 0x0000024DDBD7FCC0>
深拷贝
使用copy模块的deepcopy函数实现深拷贝,与浅拷贝不同的是,深拷贝会递归拷贝对象中包含的子对象。因此,源对象和拷贝对象的所有子对象都不相同。
import copy
class CPU():
pass
class Disk():
pass
class Computer():
def __init__(self,cpu,disk):
self.cpu = cpu
self.disk = disk
disk = Disk()
cpu = CPU()
#disk和cpu便是computer的子对象
computer = Computer(cpu,disk)
#深拷贝
computer3 = copy.deepcopy(computer)
print(computer,computer.cpu,computer.disk)
#<__main__.Computer object at 0x000002D006676940> <__main__.CPU object at 0x000002D00666FF28> <__main__.Disk object at 0x000002D00666FCC0>
print(computer3,computer3.cpu,computer3.disk)
#<__main__.Computer object at 0x000002D006676D30> <__main__.CPU object at 0x000002D006692DD8> <__main__.Disk object at 0x000002D006692EB8>
以上是关于python笔记——类的赋值浅拷贝和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章