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
相关产品推荐
相关产品推荐

