最开始初始化的时候是将h赋给p的,此时p和h应该指向同一个对象。在进行循环的时,此时p的value变成了9,我认为此时h的value也应该变成9。最后一句p=h,最终输出的p的value却是0。这是为什么
类的空间我还是不太能理解
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- smobee 2023-05-31 11:32关注
在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。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 asp写PC网站开通了微信支付,扫码付款不能跳转
- ¥50 AI大模型精调(百度千帆、飞浆)
- ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
- ¥15 非科班怎么跑代码?如何导数据和调参
- ¥15 福州市的全人群死因监测点死亡原因报表
- ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
- ¥15 系统2008r2 装机配置推荐一下
- ¥500 服务器搭建cisco AnyConnect vpn
- ¥15 悬赏Python-playwright部署在centos7上
- ¥15 psoc creator软件有没有人能远程安装啊