python的列表切片效率如何?

Wah*_*awa 1 python big-o slice

我想知道在python中切片列表的效率如何?

例如:

myList = [1, 2, 3, 4, 5]
newList = myList[1:4]
Run Code Online (Sandbox Code Playgroud)

我正在寻找big-O表示法(例如O(n))。

Sha*_*ger 6

O(n)适用于lists和大多数序列类型,因为对大多数类型进行切片会执行浅表复制,因此无法查看原始数据。

对于某些类型(例如memoryview)或第三方类型(例如numpy数组),切片会生成视图,而不是副本,因此成本为O(1),因为构造视图的成本与视图大小无关。缺点是,由于只有一小部分分配存在单个视图,因此这可以使大量分配保持活动状态。此缺陷是为什么大多数内置类型使用复制策略而不是视图策略的原因。