In [47]: lst = list(range(10**7))
In [48]: %timeit lst[:]
119 ms ± 1.65 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [49]: %timeit lst.copy()
119 ms ± 1.84 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
对于 10.000 个元素:
In [53]: lst = list(range(10**4))
In [54]: %timeit lst.copy()
44.1 µs ± 602 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [55]: %timeit lst[:]
45.6 µs ± 3.23 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
对于 100 个元素:
In [62]: lst = list(range(100))
In [63]: %timeit lst.copy()
456 ns ± 19.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [64]: %timeit lst[:]
458 ns ± 22.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
该方法
list.copy()出现在 Python 3.3中。它出现的原因是希望使语法更具可读性,并且因为对于其他对象,例如dict和set方法.copy()已经存在,使其可用于list.Python 以不同方式处理这些调用
a[:]- 使用slice, 和a.copy()- 调用适当的方法:对于 10.000.000 个元素:
对于 10.000 个元素:
对于 100 个元素:
那些。在速度方面,它们几乎相同。
我认为它
a.copy()更可取,因为 是明确且不言自明的,除此之外,如果您必须在代码中将列表 (list) 替换为集合 (set),那么切片语法将不适用于集合。PS很多有用的和相关的信息可以在SO的英文版类似问题的答案中找到