【问题标题】:Time complexity of converting tuple into a list (vice versa) [duplicate]将元组转换为列表的时间复杂度(反之亦然)[重复]
【发布时间】:2021-10-25 19:44:21
【问题描述】:

如果我们有一个列表 lst = [1,2,3,4] 并且我们将它转​​换为像这样的元组 tup = tuple(lst),那么这段代码的时间复杂度是多少?

【问题讨论】:

标签: python python-3.x data-structures


【解决方案1】:

这是一个 O(N) 操作,tuple(list) 只是将对象从列表复制到元组。 因此,您仍然可以修改内部对象(如果它们是可变的),但您不能向元组添加新项目

【讨论】:

    【解决方案2】:

    时间复杂度为 O(n),因为底层操作只是获取原始数字并将对象复制到元组而不是列表中。

    Python 列表时间复杂度:https://wiki.python.org/moin/TimeComplexity

    Operation Average Case Amortized Worst Case
    Copy O(n) O(n)

    【讨论】:

    • 嗯,对象没有被复制,但它是 O(n)
    • 它们是被复制的,如果你查看列表中值的原始对象引用与元组中的值相比,它会有所不同——它是浅拷贝而不是完整的深拷贝但在底层执行中进行的操作仍然是复制。
    • 不,不是,这就是浅拷贝的意思 btw。不,列表和元组中的对象是相同的
    • 浅拷贝构造一个全新的对象并将原始对象引用插入其中,因此操作仍然是一个副本。 docs.python.org/3/library/copy.html 当然不是复制使用的基值,而是在新复制的元组中对对象的引用发生了变化。
    • 我想我们是在互相交谈,我只是说列表中的对象没有被复制。例如。 l = [{'a':0}]; t = tuple(l); l[0]['a'] = 1; print(t[0]) 将打印 {'a':1}
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多