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

Python循环追加字典至列表时元素重复最后值的问题求助

问题分析与解决方案

这个问题我之前也碰到过,核心原因是Python中字典是可变对象,你在循环里写的dataT = dataTemplate根本没有创建新的字典实例——它只是让dataT指向了dataTemplate所在的内存地址。也就是说,每次循环你修改的都是同一个字典对象,最后listToSave里的所有元素其实都是对这同一个字典的引用,自然所有元素的id都会变成最后一次生成的UUID。

解决方法:使用深拷贝创建独立的字典实例

因为你的dataTemplate是嵌套结构的字典,普通的浅拷贝(比如dataTemplate.copy())只会复制外层字典,内部的嵌套字典还是共享引用,所以必须用深拷贝来递归复制所有嵌套的可变对象。具体步骤如下:

  1. 首先导入copy模块:
import copy
import uuid
  1. 修改循环中的字典赋值逻辑,每次循环都生成dataTemplate的深拷贝:
listToSave = []
for i in range(len(ffts)):
    # 每次循环创建一个完全独立的dataTemplate副本
    dataT = copy.deepcopy(dataTemplate)
    dataT['aClip']['info']['id'] = str(uuid.uuid4())
    # 这里添加你需要的其他操作
    print(dataT['aClip']['info']['id'])
    listToSave.append(dataT)
print('Data formated - Ready to save')

原理说明

深拷贝(copy.deepcopy())会递归遍历原字典的所有嵌套结构,为每一层的可变对象(比如内部的info字典、t字典等)都创建新的实例,这样每个dataT都是完全独立的,修改其中一个不会影响其他元素。

修改后再打印listToSave里的各个元素id,就能看到每个都是不同的UUID了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:42