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

Python中修改sim变量引发history变量改变的问题及解决方法

解决Python嵌套列表拷贝后同步修改的问题

你遇到的是Python中浅拷贝导致的引用问题。list(history[0])只是对外层列表做了一层拷贝,里面的每个子列表(比如[1]、[2])还是和history里的子列表指向同一个内存对象,所以修改sim[0]时,history里对应的子列表也会跟着变。

下面提供两种可行的解决办法:

方法1:列表推导式手动深拷贝(适合两层嵌套场景)

通过列表推导式对每个子列表也执行一次拷贝,切断子列表的引用关联:

history = [[[1],[2],[3],[4],[5]]]
sim = [list(item) for item in history[0]]

sim[0].append(5)
print(history)  # 输出:[[[1], [2], [3], [4], [5]]]
print(sim)      # 输出:[[1, 5], [2], [3], [4], [5]]

方法2:使用copy模块的deepcopy(通用嵌套场景)

如果你的列表嵌套层数更深,copy.deepcopy可以递归拷贝所有层级的对象,彻底断开所有引用:

import copy

history = [[[1],[2],[3],[4],[5]]]
sim = copy.deepcopy(history[0])

sim[0].append(5)
print(history)  # 输出:[[[1], [2], [3], [4], [5]]]
print(sim)      # 输出:[[1, 5], [2], [3], [4], [5]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:45:47