我是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解释它时,我跟随我的有限知识进行猜测.
它使用list.extend(list)方法.因此它将占用O(n*k)空间并使用O(n*k)时间.
它只复制原始列表的引用并制作它的副本.因此,它将占用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)