我一直在做一些阅读并思考这段代码:
def change(c, n: int) -> None:
c.x = n
class Value:
x = 5
m = Value()
change(Value, 3)
print(m.x)
change(m, 1)
change(Value, 2)
print(m.x)
此代码的输出为:
- 3
- 1
所以我假设的是对于 3,m 和值是别名,但更改 m 的属性会破坏这一点。我无法通过运行 id(( 来确认这一点 - 事实证明 m 和值总是有不同的 id。
有人可以解释一下发生了什么吗?
更改Value
的值时,将更改所有value
实例共享的x
值。
当您更改m
的值时,您只是为m
和m
执行此操作,实质上是用新的实例x
覆盖类x
。你可以用
k = Value()
print(k.x) # 2