小编air*_*dow的帖子

Python如何执行[list]*num?什么是时间复杂性和内存复杂性?

我是Python的新手.我最近被语法"[list]*k"搞糊涂了.我想了解Python如何实际执行它.例:

>>> l = [1, 2] * 10
>>> l
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
Run Code Online (Sandbox Code Playgroud)

假设len(list)= n,当Python解释它时,我跟随我的有限知识进行猜测.

  1. 它使用list.extend(list)方法.因此它将占用O(n*k)空间并使用O(n*k)时间.

  2. 它只复制原始列表的引用并制作它的副本.因此,它将占用O(k)空间并使用O(k)时间.

如果我的第二个猜测是这样的,为什么以及如何跟随声明有效?

>>> l[3] = 100
>>> l
[1, 2, 1, 100, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
Run Code Online (Sandbox Code Playgroud)

欢迎任何官方设计文档,源代码和PEP参考!

跟进,

@JoshLee和@MSeifert提供的源代码链接非常有助于理解内部机制.请参阅list_repeat

以下代码片段确认空间复杂度为O(n*k).

size = Py_SIZE(a) * n;
Run Code Online (Sandbox Code Playgroud)

以下代码片段确认时间复杂度为O(n*k).

p = np->ob_item;
items = a->ob_item;
for (i …
Run Code Online (Sandbox Code Playgroud)

python algorithm syntax list

5
推荐指数
1
解决办法
197
查看次数

标签 统计

algorithm ×1

list ×1

python ×1

syntax ×1