iha*_*nny 5 python deep-copy shallow-copy pandas
我注意到,在流行的回溯测试库,
def __init__(self, data: pd.DataFrame)
data = data.copy(False)
Run Code Online (Sandbox Code Playgroud)
在第631行中。这种副本的目的是什么?
浅拷贝可以让你
在回溯测试中,开发人员尝试将索引更改为格式(第 640 行),并添加一个包含值的datetime新列(如果数据框中尚不存在该列)。这些更改不会反映在原始数据帧上。'Volume'np.nan
例子
>>> a = pd.DataFrame([[1, 'a'], [2, 'b']], columns=['i', 's'])
>>> b = a.copy(False)
>>> a
i s
0 1 a
1 2 b
>>> b
i s
0 1 a
1 2 b
>>> b.index = pd.to_datetime(b.index)
>>> b['volume'] = 0
>>> b
i s volume
1970-01-01 00:00:00.000000000 1 a 0
1970-01-01 00:00:00.000000001 2 b 0
>>> a
i s
0 1 a
1 2 b
Run Code Online (Sandbox Code Playgroud)
当然,如果您不创建浅表副本,则对数据帧结构的这些更改将反映在原始副本中。