You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何box、rect、wide_box指向同一实例?Python类引用疑问

问题解答

为什么box、rect、wide_box指向同一个实例?

在Python中,变量存储的不是对象本身,而是指向对象的引用:

  • 执行box = Rectangle(5,3)时,内存中生成一个Rectangle实例,box变量保存的是这个实例的引用。
  • 调用stretch(box)时,会把box的引用传递给函数的形式参数rect,此时rect和box指向同一个实例。
  • 函数最后返回rect(也就是该实例的引用),赋值给wide_box,所以wide_box也指向同一个实例。
    这就是三者"等价"的核心原因——它们都指向内存中同一个Rectangle对象。

wide_box是不是让box的length值翻倍了?

是的,而且调用stretch(box)后,box本身指向的实例的length已经被修改了。可以加代码验证:

box = Rectangle(5,3)
print(box.length)  # 输出 5
wide_box = stretch(box)
print(box.length)  # 输出 10,原实例的length已被修改
print(wide_box.length)  # 输出 10,和box指向同一个实例

因为stretch函数直接修改了传入实例的属性,而非创建新实例,所以原box指向的对象也跟着发生了变化。

rect作为形式参数,实际拥有什么值?

当stretch(box)被调用时,rect会被赋值为box的引用——也就是指向Rectangle(5,3)实例的内存地址。在函数执行期间,rect就是这个实例的引用,所以对rect.length的修改会直接作用在原实例上。函数执行结束后,rect这个局部变量会被销毁,但它指向的实例依然存在,被box和wide_box引用着。

内容的提问来源于stack exchange,提问作者noel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:23:18