【python入门】day16:类的赋值与浅深拷贝

本文讲述了Python中变量赋值的原理,强调了列表的引用特性,并介绍了浅拷贝和深拷贝的概念,以及如何使用`copy`和`deepcopy`函数进行复制。通过实例演示了类的浅拷贝和深拷贝对对象和子对象的影响。
摘要由CSDN通过智能技术生成

类的赋值

在 Python 中,当使用赋值语句给一个列表(或其他数据类型)变量赋值时,实际上是给这个变量赋予了对这个列表的引用,而不是赋予了这个列表的值。这意味着,当这个列表在内存中的值发生改变时,所有引用该列表的变量都会受到影响。

在这里插入图片描述

类的浅拷贝

浅拷贝(shallow copy)是一种复制列表的方法,它创建一个新的列表对象,但是只复制了原列表中所有元素的引用,并没有创建新的对象作为副本。浅拷贝后得到的列表与原列表是两个独立的对象,但是它们中的元素却是指向同一个对象的。

具体来说,当使用 copy()函数或切片 [:]来进行浅拷贝时,对于不可变类型的元素(如数字、字符串等),会直接复制其值;而对于可变类型的元素(如列表、字典等),是复制其引用而不是副本,即新的元素引用与原列表相同的对象。

'''
变量的赋值操作
            只是形成两个变量,实际上还是指向同一个对象
浅拷贝:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,
       因此,源对象与拷贝对象都会引用同一个子对象(拷贝时,不拷贝子对象,拷贝后的对象同样引用所拷贝对象的子对象)
深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象月拷贝对象所有的子对象也不相同
       (拷贝时将所拷贝对象的子对象也一起拷贝)
'''
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,id(cpu1))
print(cpu2,id(cpu2))
#类的浅拷贝
disk=Disk()#创建硬盘的类对象
computer=Computer(cpu1,disk)#创建一个计算机类的对象
import copy
computer1=copy.copy(computer)
print(computer,id(computer),computer.cpu,computer.disk)
print(computer1,id(computer1),computer1.cpu,computer1.disk)
#深拷贝
computer3=copy.deepcopy(computer)
print(computer,id(computer),computer.cpu,computer.disk)
print(computer3,id(computer3),computer3.cpu,computer3.disk)

类名称加括号表示创建一个新的对象实例,没有括号则表示引用已经定义的类。
如,类Cpu后加括号表示创建一个Cpu对象实例,类Disk后没有括号则表示引用了已经定义的Disk类。

在这里插入图片描述

深拷贝

深浅拷贝的区别

浅拷贝会创建一个新的对象,但这个新对象仍然指向原始对象中子对象的引用。因此,如果原始对象中的子对象被修改,那么浅拷贝的对象也会受到影响。
在这里插入图片描述
而深拷贝则会创建一个新的对象(地址不同),这个新对象完全独立于原始对象,因此对其进行修改不会影响原始对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

print('---------------深拷贝-----------------------')
import  copy
computer3 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer3, computer3.cpu, computer3.disk)

【复习】温故而知新

__new__和__init__创建对象的过程

在这里插入图片描述

特殊方法和属性

在这里插入图片描述

多态

在这里插入图片描述
在这里插入图片描述

object 类

在这里插入图片描述

方法重写

在这里插入图片描述

单继承

在这里插入图片描述

多继承

在这里插入图片描述

封装

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Elon Musk@real

你真帅!

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

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

打赏作者

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

抵扣说明:

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

余额充值