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