问题出在 dict.fromkeys 给多个键赋的不是“每个键一个新列表”,而是同一个 value 对象。Python 3.14 中,dict.fromkeys(iterable, value) 会返回新字典,键来自 iterable,值都设为 value,所有值引用同一个实例。代码先把空列表求值一次,再把这个列表引用交给每个键;因此通过某个键原地 append、extend 或清空时,其他键看到的是同一列表的变化。若把某个键重新赋值为另一个新列表,那只是该键换了指向,其他键仍指向原列表。

适用:本题讨论南阳宛城区台式电脑环境下 Python 3.14 标准库的字典用法。排查前要确认实际解释器版本和原始调用,明确 value 是在调用前只构造一次,还是由代码在每次迭代中分别创建;不要把 Windows 系统接口的行为混同为 Python 字典行为。
观察:先只读查看客户代码中的 fromkeys 调用、传入 value 的构造方式、后续对值的读写位置和日志。看 value 是否只构造一次,是否对字典值做原地修改;再核对多个键的值是否指向同一对象身份。若多个键的值身份相同,且修改一个列表后另一个列表内容随变,同时代码执行的是原地修改,就符合本题机制;若代码对键重新赋值新列表,则不能直接归因于共享引用。检查过程不运行客户业务,不在客户字典里试改,也不改生产数据。
风险:若把 fromkeys 当作每键默认工厂,用空列表等可变对象作为 value,可能在不知情时产生跨键共享;后续一处原地修改会改变所有别名键看到的内容,影响统计、缓存或任务分组结果。风险不在于键本身重复,而在于多个键共享同一个可变值。若误以为重新赋值和原地修改等价,还可能把问题错误归到解释器或 Windows 环境。不要用试改客户字典的方式验证。
下一步:保留去敏后的原调用代码片段、实际 Python 版本、value 构造处、对字典值的读写位置和相关日志,先判断是原地修改还是重新赋值;需要每个键独立可变值时,改用字典推导式在每次迭代中新建列表。若需进一步确认台式电脑上的运行环境和排查安排,可拨打 400-877-9605 咨询,实际范围和安排需确认。处理时先备份或复制到隔离环境,不直接改生产数据。 电脑快修网提供信息展示与第三方维修对接,现有覆盖只供范围核对,不表示已完成客户程序修复或可即时履约。