相关疑难解决方法(0)

泡菜和深层镜之间的关系

究竟是什么关系picklecopy.deepcopy?他们分享了哪些机制,以及如何?

很明显这两个是密切相关的操作,并分享了一些机制/协议,但我不能围绕细节.

我发现的一些(令人困惑的)事情:

  1. 如果一个类定义__[gs]etstate__,则会调用它们deepcopy的实例.这让我感到惊讶,因为我认为它们是特定的pickle,但后来我发现Classes可以使用相同的接口来控制用于控制酸洗的复制.但是,没有关于 __[gs]etstate__深度复制时如何使用的文档(如何使用返回的值__getstate__,传递给__setstate__什么?)
  2. 一个天真的替代实现deepcopy将是pickle.loads(pickle.dumps(obj)).但是,这不可能等同于deepcopy',因为如果一个类定义了一个__deepcopy__操作,那么使用这个基于pickle的deepcopy实现就不会调用它.(我还偶然发现了一个声明,即深度复制比pickle更普遍,并且有许多类型是深度可复制的,但不是pickleable.)

(1)表示共性,而(2)表示pickle和之间的差异deepcopy.

最重要的是,我发现了这两个相互矛盾的陈述:

copy_reg:pickle,cPickle和copy模块在pickle /复制这些对象时使用这些函数

复制模块不使用copy_reg注册模块

对此,一方面,是之间的关系/共性的另一个指示pickledeepcopy,而在另一方面,有助于我的困惑......

[我的经验是使用python2.7,但我也很感激有关python2和python3之间的pickle/deepcopy差异的任何指示]

python pickle deep-copy python-2.x

21
推荐指数
2
解决办法
3718
查看次数

Pandas 数据框和字典的深度复制

我正在创建一个小型 Pandas 数据框:

df = pd.DataFrame(data={'colA': [["a", "b", "c"]]})
Run Code Online (Sandbox Code Playgroud)

我对该 df 进行了深度复制。我没有使用 Pandas 方法,而是使用通用 Python,对吧?

import copy
df_copy = copy.deepcopy(df)
Run Code Online (Sandbox Code Playgroud)

df_copy.head() 给出以下内容:

在此输入图像描述

然后我将这些值放入字典中:

mydict = df_copy.to_dict()
Run Code Online (Sandbox Code Playgroud)

该字典看起来像这样:

在此输入图像描述

最后,我删除列表中的一项:

mydict['colA'][0].remove("b")
Run Code Online (Sandbox Code Playgroud)

我很惊讶 df_copy 中的值已更新。我很困惑原始数据框中的值也被更新了!两个数据框现在看起来都是这样的:

在此输入图像描述

我知道 Pandas 并没有真正进行深度复制,但这不是 Pandas 方法。我的问题是:

1)如何从不更新数据帧的数据帧构建字典?

2)如何获取完全独立的数据帧的副本?

感谢您的帮助!

干杯,尼古拉斯

python dictionary copy pandas

6
推荐指数
1
解决办法
4805
查看次数

标签 统计

python ×2

copy ×1

deep-copy ×1

dictionary ×1

pandas ×1

pickle ×1

python-2.x ×1