在Python3.5 +中制作浅表列表的最快方法是什么?

时间:2017-12-17 21:09:31

标签: python python-3.x performance copy shallow-copy

有几种方法可以在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?

1 个答案:

答案 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时所有变体的行为大致相同: enter image description here

但在len(some_list) < 1000,我们有一个明显的赢家,它是 [*some_list] enter image description here

使用Python 3.6.3,Windows 7进行测量。