类的空间我还是不太能理解

最开始初始化的时候是将h赋给p的,此时p和h应该指向同一个对象。在进行循环的时,此时p的value变成了9,我认为此时h的value也应该变成9。最后一句p=h,最终输出的p的value却是0。这是为什么

img

img

在Python中,当你执行 p = h 时,它并不是将 h 赋值给 p,而是将 p 引用(reference)指向 h 引用指向的对象。这意味着 p 和 h 引用的是同一个对象。

当你在循环中修改 p.value 时,实际上是修改了 p 引用的对象的属性值,而 h 引用仍然指向最初的对象,没有被修改。这是因为 p 和 h 引用的是同一个对象,它们共享相同的对象属性。

在执行 p = h 时,p 引用的指向改变了,它不再指向原来的对象,而是指向 h 引用指向的对象。因此,在循环结束时,p 和 h 引用指向的是同一个对象,但是你最后的输出是 p.value,即当前 p 引用指向对象的属性值,因此输出的是最后一次循环中 p.value 的值。

如果你希望将 h 的属性值赋给 p,你可以使用 p.value = h.value,这将会将 h 的属性值复制给 p 的属性值。

下面是一个简单的示例来说明这个概念:


class MyClass:
    def __init__(self, value):
        self.value = value

h = MyClass(0)
p = h

for i in range(1, 10):
    p.value = i

print(p.value)  # 输出:9
print(h.value)  # 输出:9

在上述示例中,p 和 h 引用的是同一个对象,因此它们的属性值都会被修改,并且最终输出的值都是 9。

int 类型默认值就是0 6的下一个节点 构造器初始化int类型默认值为0