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

Python中如何复制嵌套字典避免别名关联导致的值同步修改问题

你遇到的现象本质是Python中可变对象的引用传递机制导致的:你定义的specificSensorInfo是字典类型(可变对象),直接赋值给多个键时,所有位置都指向同一个内存地址的对象,修改任意位置的内容都会同步到所有引用该对象的位置。

以下两种方案都可以保留字典[]操作符的使用习惯,不需要引入类实现需求:

方案1:使用字典浅拷贝

你的内层字典初始值都是不可变类型,直接调用dict.copy()生成独立副本即可满足需求,修改后的构建代码如下:

# 内层字典模板
specificSensorInfo = {
    "value": None,
    "status": None
}

# 中层字典每个键对应一个独立的字典副本
board1_sensors = {
    13: specificSensorInfo.copy(),  # "AUX +3.3V Vol"
    14: specificSensorInfo.copy(),  # "MCU_Temperature" 
    15: specificSensorInfo.copy(),  # "AUX +3.3V Temp"  
}

board2_sensors = {
    13: specificSensorInfo.copy(),  # "AUX +3.3V Vol"
    14: specificSensorInfo.copy(),  # "MCU_Temperature" 
    15: specificSensorInfo.copy(),  # "AUX +3.3V Temp"  
}

# 最外层字典
all_sensor_info = {'B1': board1_sensors, 'B2': board2_sensors}

方案2:使用工厂函数生成内层字典

如果后续内层字典字段需要频繁调整、或者需要批量生成大量内层字典,可以写一个简单的工厂函数,避免每次手动调用copy,代码更易维护:

# 工厂函数,每次调用返回一个独立的内层字典实例
def get_sensor_info():
    return {
        "value": None,
        "status": None
    }

# 构建中层字典时直接调用函数生成独立实例
board1_sensors = {
    13: get_sensor_info(),
    14: get_sensor_info(),
    15: get_sensor_info()
}
board2_sensors = {
    13: get_sensor_info(),
    14: get_sensor_info(),
    15: get_sensor_info()
}
all_sensor_info = {'B1': board1_sensors, 'B2': board2_sensors}

两种方案修改完成后,你原本的赋值操作all_sensor_info['B1'][13]['value'] = 10、all_sensor_info['B2'][14]['status'] = 'OK'只会修改对应位置的字典值,不会出现全局同步修改的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:30:00