python笔记——类的赋值、浅拷贝和深拷贝

本文详细介绍了Python中的变量赋值、浅拷贝和深拷贝的概念。通过示例展示了当对对象进行赋值或拷贝时,如何影响内存中的对象引用。浅拷贝仅复制对象的引用,而深拷贝则递归复制所有子对象,确保源对象和拷贝对象的子对象互不相同。理解这些概念对于避免意外的副作用和正确管理内存至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量的赋值操作

只是形成两个变量,实际上这两个变量指向同一个对象。

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

联邦学习小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值