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

复制后的DataFrame与源DataFrame是否等价?为何地址独立却同步变更?

Pandas DataFrame复制后同步变更的原因分析

问题现象

执行以下步骤后,发现两个DataFrame的内存地址完全独立,但修改其中一个的元素时,另一个的内容也会同步变更:

  • 创建原始DataFrame
  • 通过pd.DataFrame(原DataFrame)创建复制版
  • 修改源DataFrame的元素
  • 修改复制后DataFrame的元素
  • 检查两者的内存地址与内容

代码示例

import pandas as pd  

gl_stock_001 = pd.DataFrame({'prc': [3], 'sum': [2], 'dif': [1]})
stock_copy = pd.DataFrame(gl_stock_001)
display(gl_stock_001)
display(stock_copy)
print(id(gl_stock_001), id(stock_copy))

gl_stock_001.loc[0,'sum'] = 777
stock_copy.loc[0,'dif'] = 333
display(gl_stock_001)
display(stock_copy)
print(id(gl_stock_001), id(stock_copy))

操作结果

操作结果

原因解析

这是因为你使用的是**Pandas的浅拷贝(Shallow Copy)**机制:

  1. 当通过pd.DataFrame(原DataFrame)构造新对象时,Pandas会创建一个新的DataFrame实例(所以id()返回的内存地址不同),但这个新对象并不会复制底层的实际数据(即存储列值的numpy数组),而是直接共享原DataFrame的数据块。
  2. 当你通过loc修改元素时,本质是在修改共享的底层数据数组,因此两个DataFrame都会同步显示修改后的结果。
  3. 如果需要创建完全独立、修改互不影响的拷贝,应该使用DataFrame的copy()方法(默认deep=True,可直接写stock_copy = gl_stock_001.copy()),这样会完整复制底层数据,实现真正的独立拷贝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:05:35