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

将同一DataFrame存入字典多份后修改为何同步变化?如何解决?

字典中多DataFrame修改同步的问题及解决

问题重现

你初始化了一个DataFrame并三次赋值给字典的不同键,代码如下(注:原代码中变量名存在不一致,已修正为dict_strat):

import pandas as pd

df = pd.DataFrame({'A': [2, 2], 'B': [2, 2]})

dict_strat = {}

for i in range(3):
    dict_strat['Df {0}'.format(i)] = df

当执行以下修改操作时:

dict_strat['Df 0'].iloc[0, :] = 9

发现字典中所有DataFrame的内容都被修改了。

原因分析

Python中,可变对象(如Pandas的DataFrame)的赋值操作传递的是对象引用,而非创建新的对象副本。你在循环中把df赋值给字典的不同键,本质是让这三个键都指向内存中同一个DataFrame对象。因此,无论通过哪个键修改数据,都是在修改同一个底层对象,所有引用该对象的字典元素自然会同步变化。

解决方法

每次赋值时创建DataFrame的独立副本,使用Pandas提供的copy()方法:

  • 浅拷贝(默认行为):df.copy(),适用于DataFrame中无嵌套可变对象(如列表、字典)的场景,仅复制顶层数据,执行效率更高。
  • 深拷贝:df.copy(deep=True),会递归复制所有嵌套的可变对象,确保新对象与原对象完全独立。

修改后的代码如下:

import pandas as pd

df = pd.DataFrame({'A': [2, 2], 'B': [2, 2]})

dict_strat = {}

for i in range(3):
    dict_strat['Df {0}'.format(i)] = df.copy()

此时字典中每个键都对应一个独立的DataFrame对象,修改其中一个不会影响其他元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:10:35