copy.deepcopy和pickle都是Python中用于复制对象的工具。 copy.deepcopy是copy模块中的函数,用于创建一个新的对象,该对象和原始对象具有相同的值,但是它们是独立的。这意味着对新对象所做的任何更改都不会影响原始对象。copy.deepcopy使用递归的方式复制对象,可以处理包含嵌套对象的复杂数据结构。 pickle是Python的标准模块,用于将对象序列化为字节流,以便在文件中保存或在网络上传输。pickle模块可以将对象转换为字节流,并将其保存到文件中;也可以从文件中读取字节流,并将其转换回对象。pickle可以处理几乎所有的Python内置数据类型,以及用户自定义的类和对象。 copy.deepcopy和pickle的主要区别在于它们的用途和实现方式。copy.deepcopy主要用于在内存中复制对象,以便在程序中使用。而pickle主要用于将对象序列化并保存到文件中,或者从文件中读取并反序列化为对象。 总的来说,copy.deepcopy适用于复制对象以供程序内部使用,而pickle适用于将对象保存到文件中或在网络上传输。

10 浏览
0 Comments

copy.deepcopy和pickle都是Python中用于复制对象的工具。 copy.deepcopy是copy模块中的函数,用于创建一个新的对象,该对象和原始对象具有相同的值,但是它们是独立的。这意味着对新对象所做的任何更改都不会影响原始对象。copy.deepcopy使用递归的方式复制对象,可以处理包含嵌套对象的复杂数据结构。 pickle是Python的标准模块,用于将对象序列化为字节流,以便在文件中保存或在网络上传输。pickle模块可以将对象转换为字节流,并将其保存到文件中;也可以从文件中读取字节流,并将其转换回对象。pickle可以处理几乎所有的Python内置数据类型,以及用户自定义的类和对象。 copy.deepcopy和pickle的主要区别在于它们的用途和实现方式。copy.deepcopy主要用于在内存中复制对象,以便在程序中使用。而pickle主要用于将对象序列化并保存到文件中,或者从文件中读取并反序列化为对象。 总的来说,copy.deepcopy适用于复制对象以供程序内部使用,而pickle适用于将对象保存到文件中或在网络上传输。

我有一个小部件的树形结构,例如集合包含模型,模型包含小部件。我想要复制整个集合,与“pickle和解pickling”对象相比,copy.deepcopy更快,但是由于cPickle是用C编写的,所以更快。

  1. 为什么我(我们)不应该总是使用cPickle而不是deepcopy?
  2. 是否有其他的复制替代方案?因为pickle比deepcopy慢,但cPickle更快,所以可能一个C实现的deepcopy将是胜利者。

示例测试代码:

import copy
import pickle
import cPickle
class A(object): pass
d = {}
for i in range(1000):
    d[i] = A()
def copy1():
    return copy.deepcopy(d)
def copy2():
    return pickle.loads(pickle.dumps(d, -1))
def copy3():
    return cPickle.loads(cPickle.dumps(d, -1))

计时:

>python -m timeit -s "import c" "c.copy1()"
10 loops, best of 3: 46.3 msec per loop
>python -m timeit -s "import c" "c.copy2()"
10 loops, best of 3: 93.3 msec per loop
>python -m timeit -s "import c" "c.copy3()"
100 loops, best of 3: 17.1 msec per loop

0