python - 机器字典理解或现有字典的深度复制更容易什么?
问题描述
初始化一个函数我需要两个相同的字典,其中一个我只能用 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
. 但是,deepcopy
当然更灵活。
推荐阅读
- python - 处理两个numpy数组时出现ValueError
- javascript - Node.Js 从 Postman 传递数据并使用控制器代码对其进行设置
- python - 用熊猫中的另一个数组替换列表值
- mysql - ERROR 1071 (42000):指定的密钥太长;最大密钥长度为 3072 字节
- javascript - EventSource 是否消耗浏览器的资源?
- python - 如何计算熊猫数据框列属性的特定值
- javascript - 本地存储 - 刷新时出现错误的列表项
- javascript - 如何在反应中设置背景图像内联样式的高度和宽度
- google-cloud-platform - 如何接收来自谷歌云平台存储桶的电子邮件
- javascript - 一个简单的函数可以正常工作,但也会显示未定义的错误消息