python类的赋值操作和浅拷贝

变量的赋值

只是形成了两个变量,但是还是指向同一个对象,我们来看看代码

class SWS:
    pass

class SSN:
    pass

class C:
    def __init__(self, sws, ssn):
        self.sws = sws
        self.ssn = ssn

#(1)变量的赋值操作
sws_0 = SWS()
sws_1 = sws_0
print(sws_0)
print(sws_1)

######
<__main__.SWS object at 0x0000022230273FD0>
<__main__.SWS object at 0x0000022230273FD0>

我们可以看到两个变量的地址都是一模一样的,在这里变量的赋值其实就是和C语言里面的指针赋值差不多,都是指向同一个对象,如图所示

 浅拷贝

python的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象,那这句话是什么意思呢,一起来看一下

#(2)类的浅拷贝
ssn = SSN()
c = C(sws_0, ssn)

import copy
print(ssn)
c_2 = copy.copy(c)
print(c, c.sws, c.ssn)
print(c_2, c_2.sws, c_2.ssn)

######
<__main__.SSN object at 0x0000022230273FA0>
<__main__.C object at 0x0000022230273F70> <__main__.SWS object at 0x0000022230273FD0> <__main__.SSN object at 0x0000022230273FA0>
<__main__.C object at 0x0000022230273D90> <__main__.SWS object at 0x0000022230273FD0> <__main__.SSN object at 0x0000022230273FA0>

在输出当中我们就可以看到啊c和c_2的地址不一样呀,但是怎么后面的子对象地址不一样呢

这就是呀,我们利用浅拷贝的方法使得c和c2都成为了C的实例对象,但是他们内部的子对象sws和ssn却都是指向同一个SWS和SSN的实例对象

posted @   放氮气的蜗牛  阅读(10)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示