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

为何删除vars(实例)返回字典的键会导致原对象对应属性丢失?

异常产生的原因

vars(self) 作用于类实例时,返回的是该实例内置属性 __dict__ 的直接引用,而非独立副本。__dict__ 是 Python 用于存储实例所有自定义成员属性的字典,对 vars(self) 返回的字典对象做的任何修改,都会直接同步作用于实例本身的属性集合。
你的代码中直接执行 del basic['contract'],等价于直接删除实例自身的 contract 属性,后续再访问 inst.contract 时自然会抛出 AttributeError 异常。

使用 vars(self).copy() 后正常的原因

字典的 copy() 方法会生成一个新的独立浅拷贝字典,新字典和原实例的 __dict__ 是完全分离的两个内存对象。此时你删除拷贝字典中的 contract 键,只会修改这个新生成的临时字典,不会对原实例的 __dict__ 产生任何影响,实例的 contract 属性依旧存在,因此不会抛出异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:08