首页 > 解决方案 > 为什么元组在 python 中切片`O(n)`?

问题描述

In [1]: x = tuple(range(0,5000000))                                                                                                                                                                                

In [2]: %timeit x[0:200000]                                                                                                                                                                                        
782 µs ± 8.82 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [3]: %timeit x[0:200]                                                                                                                                                                                           
350 ns ± 4.43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

所以......看起来更大的元组切片意味着花费更多的时间,因此元组对于以下操作来说是一个糟糕的数据结构:(head, tail) = t[0], t[1:]. (另见蒂姆·彼得斯:https ://mail.python.org/pipermail/python-list/2003-May/225347.html )

但是因为元组是不可变的,我原以为可以实现切片来引用原始元组的数据,而不是像发生的那样在内部复制数据引用列表。那么,这是怎么回事?他们以缓慢的方式实施是否有原因?

标签: pythonpython-3.x

解决方案


推荐阅读