在 Python3.5+ 中制作列表的浅表副本的最快方法是什么?
What is the fastest way to make a shallow copy of list in Python3.5+?
在 Python 3.5+ 中制作 list
的 浅层 副本有几种选择。明显的是:
some_list.copy()
some_list[:]
list(some_list)
[*some_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.
进行测量
在 Python 3.5+ 中制作 list
的 浅层 副本有几种选择。明显的是:
some_list.copy()
some_list[:]
list(some_list)
[*some_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.
进行测量