Joe*_*ern 90 python performance dictionary copy
我有一个Python程序,可以很好地使用字典.我必须复制词典数千次.我需要密钥和相关内容的副本.副本将被编辑,不得链接到原件(例如,副本中的更改不得影响原件.)
键是字符串,值是整数(0/1).
我目前使用一种简单的方法:
newDict = oldDict.copy()
Run Code Online (Sandbox Code Playgroud)
分析我的代码显示复制操作占用大部分时间.
是否有更快的替代dict.copy()方法?什么会最快?
Dan*_*olo 62
查看Python 操作的C源代码dict,您可以看到它们执行了一个非常天真(但有效)的副本.它基本上归结为PyDict_Merge:
PyDict_Merge(PyObject *a, PyObject *b, int override)
Run Code Online (Sandbox Code Playgroud)
这样就可以快速检查它们是否是同一个对象,以及它们中是否有对象.之后,它会对目标字典进行大量的一次性调整大小/分配,然后逐个复制元素.我没有看到你比内置更快copy().
utd*_*mir 54
正如你所说,外观dict.copy更快.
[utdmr@utdmr-arch ~]$ python -m timeit -s "d={1:1, 2:2, 3:3}" "new = d.copy()"
1000000 loops, best of 3: 0.238 usec per loop
[utdmr@utdmr-arch ~]$ python -m timeit -s "d={1:1, 2:2, 3:3}" "new = dict(d)"
1000000 loops, best of 3: 0.621 usec per loop
[utdmr@utdmr-arch ~]$ python -m timeit -s "from copy import copy; d={1:1, 2:2, 3:3}" "new = copy(d)"
1000000 loops, best of 3: 1.58 usec per loop
Run Code Online (Sandbox Code Playgroud)
Mik*_*han 12
你能提供一个代码示例,这样我就可以看到你如何使用copy()以及在什么情况下?
你可以用
new = dict(old)
Run Code Online (Sandbox Code Playgroud)
但我不认为它会更快.
| 归档时间: |
|
| 查看次数: |
81581 次 |
| 最近记录: |