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