【发布时间】:2015-11-17 04:01:02
【问题描述】:
我们说classes 在 Python 中是可变的,这意味着您可以使用引用我们可以更改将反映在对象中的值。例如,
>>> A = [1, 2, 3]
>>> B = A
>>> B[2] = 5
>>> A
[1, 2, 5]
在这里我可以使用B 更改A 对象的值,因为list 是一个可变类型。我的问题是为什么我不能使用相同的概念更改以下类的属性:
class C:
apple = 2
def __init__(self):
self.dangerous = 2
D = C # D is pointing to same class C
D().dangerous = 5 # changing the value of class attribute D
D().apple = 3 # changing the value of apple here
print D().apple
print D().dangerous
OUTPUT:
2
2
谁能解释为什么输出是2 和2 而不是3 和5,因为我们说这个类是mutable 类型。
更新:参考@zxq9 的答案,如果您在D=C 时看到下图,D 实际上指向的是同一个类,而不是您所描述的新对象。你能解释一下吗:
【问题讨论】:
-
人们为什么要反对这个? OP 提出了一个非常明确的问题,只是没有意识到实例化对象和类定义之间的语法差异。
-
@zxq9 你能看到我更新的照片吗?
-
是的,但是你仍然只是分配给类的一个临时实例,而不是类本身。我会玩弄这个并扩大我的答案以涵盖这个。记住 Python 是一件非常的好事。
-
你太棒了。谢谢你:)
标签: python class object immutability mutable