1

我有一个清单:

a = [1,2,3,4]

现在我想将列表复制a为列表b

b = list(a)

我想知道制作列表副本的步骤的复杂性a

4

3 回答 3

3

复制列表时:

  • list.copy()
  • list[:]
  • list()

它遍历所有元素。所以时间复杂度由列表的大小定义,即O(n)

于 2020-10-16T01:18:56.457 回答
2

当您对可变数据类型执行复制操作时:

b = list(a)
a is b # False

它将整个数据复制到另一个内存位置,时间复杂度由列表的总大小定义,即O(n)

如果您已将其分配如下(别名):

b = a
a is b # True

那么时间复杂度将是O(1)

更多细节看这里

于 2020-10-16T01:16:53.367 回答
2

浅复制,切片需要 O(n) 因为 Python 遍历列表中的所有元素并将对象引用的副本添加到新列表(按引用复制)。

浅拷贝

list.copy()

列表切片

list[:]

使用内置列表构造函数 list(...)

list()

使用列表理解

[e for e in lst]

于 2020-10-16T01:23:13.950 回答