python 实例修改类变量后 类变量还纯洁吗?

本代码先后通过实例和类对类变量进行赋值并追踪变量的地址进行探查
废话不多说,先铺代码再研究

class Person:
    name = '无常'
    def __init__(self,name):
        print(f"创建实例{name}成功")

p = Person('p')
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址=', id(Person.name))
print('p.name地址=', id(p.name))
print('修改Person.name为liuxugui666')
Person.name = 'liuxugui666'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址', id(Person.name))
print('p.name地址', id(p.name))
print('修改p.name为无常先生后')
p.name = '无常先生'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('p.name地址', id(p.name))
print('Person.name地址', id(Person.name))
print('修改Person.name为WuChang后')
Person.name = 'WuChang'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址', id(Person.name))
print('p.name地址', id(p.name))
p1 = Person('p1')
print('p1.name的地址',id(p1.name))

运行结果如下
在这里插入图片描述
1.创建实例p后通过p直接调用类变量name,此时Person.name 和 p.name值和地址均相同 显然p.name直接指向类变量的内存空间

p = Person('p')
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址=', id(Person.name))
print('p.name地址=', id(p.name))

在这里插入图片描述
2.随后,通过Person修改name的值,可以看出Person.name的地址发生了改变,但同时p.name也发生了改变 并指向了Person.name的同一个地址

print('修改Person.name为liuxugui666')
Person.name = 'liuxugui666'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址', id(Person.name))
print('p.name地址', id(p.name))

在这里插入图片描述
3.通过实例p修改类变量name的值,显然p.name的地址发生了改变。但是Person.name的地址没有变化。此时p.name与Person.name指向了不同的地址空间

p.name = '无常先生'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('p.name地址', id(p.name))
print('Person.name地址', id(Person.name))

在这里插入图片描述
4.再次通过类Person修改类变量name的值,显然Person.name的地址发生了改变,可奇怪的是p.name居然没有随之改变。也就是说p.name指向了一块独立的与Person无关联的地址空间

print('修改Person.name为WuChang后')
Person.name = 'WuChang'
print('Person.name=', Person.name)
print('p.name=', p.name)
print('Person.name地址', id(Person.name))
print('p.name地址', id(p.name))

在这里插入图片描述
5.再次创建一个实例p1,并输出p1.name的地址,此时 p1.name任然指向了Person.name的同一个地址

p1 = Person('p1')
print('p1.name的地址',id(p1.name))

在这里插入图片描述

总结:由上分析,那么是不是可以认为。当实例p对类变量name进行修改后,对于p来说类变量name已经变成了一个类似实例变量,只属于实例p的私有变量了呢?而对于p1来说类变量还是一个属于类的公有变量

PS:刚学Python,以上属于尝试解决自己的困惑,如果犯了低级错误请指正。谢谢(_)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值