【发布时间】:2021-02-26 04:29:03
【问题描述】:
class Circle:
a = 2
b = a
#print class variables
print(Circle.a)
print(Circle.b)
2
2
# updating class variable a to value 100
Circle.a = 100
# printing updated class variables
print(Circle.a)
print(Circle.b)
100
2
为什么类变量 b 也不更新为 100 ? 我可以在没有 setter 方法的情况下更改变量吗?
【问题讨论】:
-
因为整数是不可变的,不可变的变量不是通过引用传递的,而可变对象是,例如
list或dict。将a设置为list,然后将append设置为b,以查看它们现在已“链接”。 -
@Mandera 这是一个常见的误解,即赋值与可变性有关。赋值对可变和不可变对象的工作方式相同。这里的解释很简单,最初,名称
a和b都指向内存中的相同值(2)(赋值从不复制数据)。然后,a被重新分配以指向值100。 名称是独立重新分配的。对于列表或字典,您会观察到完全相同的行为。 -
@timgeb 有道理,谢谢你的启发!
-
@Mandera 没问题,这是 Ned 的video,它比我在评论中更好地解释了这个问题。
标签: python oop variables updating class-variables