有几种方法可以在Python 3.5+中制作list
的浅副本。显而易见的是:
some_list.copy()
some_list[:]
list(some_list)
[*some_list]
哪种方法最快?
注意: 虽然这个问题与列表的副本有关,但它只涉及Python 3.5+的性能。如果您需要回答问题" 为什么需要Python列表的副本?"或" 浅层之间有什么区别?和Python中的列表深度复制?"阅读以下: How to clone or copy a list?
答案 0 :(得分:7)
这个问题唯一合理的答案是比较他们的执行时间。由于这个问题涉及Python 3.5+,我会记得在Python 3.5中PEP 448 -- Additional Unpacking Generalizations被批准,结果是 [*some_list]
是制作浅层副本的最快方法Python 3.5+中的列表,测量结果如下所示。当然还有很多方法可以制作副本,但我将重点关注以下内容:
some_list.copy()
some_list[:]
list(some_list)
[*some_list]
from copy import copy; copy(some_list)
请记住,这些时间彼此相关,但趋势应该相似。
从下图可以看出,len(some_list) >= 1000
时所有变体的行为大致相同:
但在len(some_list) < 1000
,我们有一个明显的赢家,它是 [*some_list]
:
使用Python 3.6.3,Windows 7进行测量。