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

What is the fastest way to make a shallow copy of list in Python3.5+?

在 Python 3.5+ 中制作 list 浅层 副本有几种选择。明显的是:

哪种方法最快?

注意: 虽然此问题与 "copy of the list" 有关,但它仅涉及 Python 3.5+ 中的性能。如果您需要回答“为什么需要 Python 中的列表副本?”或“shallow 之间有什么区别和 Python? 中列表的深度复制”阅读以下内容: How to clone or copy a list?

这个问题唯一合理的答案就是比较它们的执行时间。由于问题涉及 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.

进行测量