gpt4 book ai didi

python - 由于性能原因避免深层复制

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:16 24 4
gpt4 key购买 nike

我有一个列表,其中包含另外 3 个列表。我需要对列表进行一些操作,因为我有 180.000 个这样的列表,深度复制的步骤已经需要 2.5 秒才能复制一次列表。包括操作在内的总时间在 220 秒的计算时间中占了 80 秒。

s = [[1,2,3],
[4,5,6],
[7,8,9]]
s1 = copy.deepcopy(s)
s1[0][0] = s[1][1]
s1[1][1] = s[0][0]

显示的操作需要重复一百万次。所以deepcopy让我面临性能瓶颈。

是否有更高效的方式或不同的方法来“取消引用”列表

最佳答案

deepcopy 似乎有一些开销来检查它能够处理的所有这些不同情况。如果您的列表始终是列表列表(一层嵌套),那么您可以尝试仅使用 s = [list(x) for x in s]s = list(map (列表,s))。两者似乎都快了很多:

In [9]: s = [[random.randint(1, 1000) for _ in range(100)] for _ in range(100)]
In [10]: %timeit copy.deepcopy(s)
10 loops, best of 3: 22.7 ms per loop
In [11]: %timeit [list(x) for x in s]
10000 loops, best of 3: 123 µs per loop
In [18]: %timeit list(map(list, s))
10000 loops, best of 3: 111 µs per loop

或者,根据您的应用程序,最好不要复制和存储(修改后的)列表本身,而只复制和存储修改,以修改后的单元格的形式或作为命令堆栈。

关于python - 由于性能原因避免深层复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35008473/

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