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

Python循环中键值赋值异常:所有仪器last_calibrated属性值相同

问题成因

instrument_props属于Python可变字典对象,循环中直接将该对象赋值给所有仪器对应的value时,所有仪器的属性字典都指向同一块内存地址。每次循环修改last_calibrated属性本质都是修改同一个字典对象,最终所有仪器的属性值都会保留最后一次循环的赋值结果。

规避方案

每次为仪器赋值属性时,创建属性模板的独立副本即可,当前属性模板的所有值都是不可变类型,使用浅拷贝即可满足需求,修改后的循环逻辑如下:

for instrument in [4167,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972]:
    # 为每个仪器生成独立的属性字典副本
    instruments[instrument] = instrument_props.copy()
    randdays = random.randrange(days_between_dates)
    print(randdays)
    instruments[instrument]['last_calibrated'] = start_date + datetime.timedelta(days=randdays)

也可以选择不在循环外定义属性模板,直接在循环内创建全新的属性字典,同样可以避免引用共享问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:54:00