gpt4 book ai didi

python - deepcopy() 非常慢

转载 作者:IT老高 更新时间:2023-10-28 20:26:23 30 4
gpt4 key购买 nike

我在 Python 中有一个包含大约 1000 个对象(行星系统 + 恒星 + 行星)的游戏状态,我需要复制它并在请求时对其应用一堆转换。但是,大约 1 个请求/秒,这是 taking up 24.63% of my runtime .我怎样才能让它快速运行?请注意,减少复制不是一种选择,因为转换几乎涉及所有内容。

编辑:通过在事物上明智地实现 __deepcopy__ 将其降低到 8%。不过,还不够好。 (1% 或更少就足够了,我打算在这方面投入更多的东西。)timeit 说每个 deepcopy() 需要 41.8 毫秒。

最佳答案

实际上,deepcopy 很慢。但我们可以使用 json、ujson 或 cPickle。我们可以使用 json/cPickle 转储一个对象,然后再加载它。这是我的测试:

Total time: 3.46068 s
File: test_deepcopy.py
Function: test at line 15
Line # Hits Time Per Hit % Time Line Contents
==============================================================
15 @profile
16 def test():
17 100 957585 9575.9 27.7 b = deepcopy(a)
18 100 862 8.6 0.0 c = copy(a)
19 100 42295 422.9 1.2 d = ujson.loads(ujson.dumps(a))
20 100 85040 850.4 2.5 e = json.loads(json.dumps(a))
21 100 2323465 23234.7 67.1 f = pickle.loads(pickle.dumps(a, -1))
22 100 51434 514.3 1.5 g = cPickle.loads(cPickle.dumps(a, -1))

如我们所见,json/ujson/cPickle 比 deepcopy 快,但是 pickle...

关于python - deepcopy() 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24756712/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com