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笔记——类的赋值浅拷贝和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

Python 赋值浅拷贝和深拷贝

Python中的赋值,浅拷贝和深拷贝的区别

Python3中赋值浅拷贝和深拷贝

Python中的赋值,浅拷贝和深拷贝的区别

python中的赋值浅拷贝和深拷贝

NumPy之浅拷贝和深拷贝