两端简易函数代码求解释

这里有两段代码,output都是3 ,但容易混淆,谁能清楚解释一下

```python
#第一段
class A:
    X=0
    def __init__(self,v=0):
        self.Y=v
        A.X+=v
a=A()
b=A(1)
c=A(2)
print(c.X)

#第二段

class A:
    def __init__(self,v=2):
        self.v=v
    def set(self,v=1):
        self.v+=v
        return self.v

a=A()
b=a
b.set()
print(a.v)
#根据第一段代码逻辑,这里我觉得是4

```

第一段A类似其他语言的静态属性,所有实例共享的,任何一个实例操作过,其他实例都会得到最新的结果(意思就是同一个地址上存储的内容),题主可以看下这个

第二段是申明了一个b变量同时指向a变量的地址上面的对象,用a或者b改这个地址中的内容,2个变量都会获取到一样的的内容,因为操作的是同一个地址上的对象

第一段X是类变量,类变量在类及每一个实例中是共享的,所以,创建几个实例或者直接用变量相加都会改变X的值
如a=A()
b=A(1)
c=A(2)
A.X += 2
print(c.X) --这里是5
第二段代码只创建一个实例,有两个引用,其实这里 a is b 的结果是True,所以通过b改变了v ,那a自然就得到了同一个v

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632