首页 > 解决方案 > 机器字典理解或现有字典的深度复制更容易什么?

问题描述

初始化一个函数我需要两个相同的字典,其中一个我只能用 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)

好吧,我不希望我的情况有很大的不同,但我只是好奇它一般是如何工作的。

标签: pythonpython-2.7

解决方案


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. 但是,deepcopy当然更灵活。


推荐阅读