python - 机器字典理解和现有字典的深度复制哪个更容易?

标签 python python-2.7

初始化一个函数我需要两个相同的字典,其中一个我只能用 dict 创建。理解。但是当谈到第二个时,我很好奇机器是否更容易(更少的时间和/或更少的操作)将其作为第一个的深度复制,或者更确切地说重复相同的理解。

我通常将两者都设置为推导式,因为我的字典通常很小,但是当没有空值和/或更多键时,这可能很重要。

# both as comprehensions (implying I already have keys)
dict1 = {key: [] for key in keys}
dict2 = {key: [] for key in keys}

# second one as a deepcopy of the first
dict1 = {key: [] for key in keys}
dict2 = copy.deepcopy(dict1)

嗯,我预计我的情况不会有太大差异,但我只是好奇它一般是如何工作的。

最佳答案

deepcopy 比第一个示例执行了更多的工作/检查,一个简单的计时练习证实了这一点:

In [1]: import copy 
   ...:  
   ...: dict1 = {key: [] for key in 'abcdefgh'}    
   ...:  
   ...: %timeit dict2 = {key: [] for key in 'abcdefgh'} 
   ...:  
   ...: %timeit dict2 = copy.deepcopy(dict1) 
   ...:                                                                                                                                                                                                                                                                                   
816 ns ± 5.09 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
21 µs ± 28.6 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

如果您提前知道您的数据结构(即嵌套级别和类型等),那么您可以通过避免深度复制来获得可观的性能提升。不过,deepcopy 当然更灵活。

关于python - 机器字典理解和现有字典的深度复制哪个更容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053648/

相关文章:

python - python中去除异常值的函数

python-2.7 - 64 位 Windows 7 上的 Python 32 或 64?安装 easy_install 会有什么影响?

python - pygame 中的文本格式为段落?

python - 使用 python 编码从 Excel 读取字符串的缺点 ('utf-8' )

python - 用 Scipy (Python) 将经验分布拟合到理论分布?

python - 从字典中的自定义函数访问值

Python - CalledProcessError : Command '[...]' returned non-zero exit status 127

python - 如何使用 GDAL 将操纵的栅格值写入 ASCII 网格?

python - 如何在没有循环的情况下在 Cython 中创建空的 char 数组

python - 如何使用另一个方法的签名创建一个新方法