这里有两段代码,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