【问题标题】:How would you write a simple version of copy.deepcopy()?你将如何编写一个简单版本的 copy.deepcopy()?
【发布时间】:2020-03-12 18:09:04
【问题描述】:

对于嵌套列表,伪代码是什么样子的

 mylist = [[1,2],[3,[4,5]],6]
 def mydeepcopy(mylist)
 >> [[1,2],[3,[4,5]],6] 

它在所有层中返回一个完全不同的列表

我能想到的就这些了

def mycopy(mylist):
    if mylist is not 1-dimensional:
        mycopy(elem for elem in mylist)
    else:
        add mylist.copy() to new list

【问题讨论】:

  • 嵌套列表不是 n 维数组。
  • @chepner 是的,我不是那个意思。
  • @ScottHunter 我假设您将使用递归在一维列表的每个级别创建一个副本。我认为这是其中之一,它简洁但对于像我这样的初学者来说并不容易掌握。
  • “掌握”它的最佳方法是实际尝试编写它,如果遇到困难,请返回。
  • 展示你的尝试,我们不会因此让你难堪。但是,如果您只是复制我们的答案,您将无法学习。

标签: python list copy deep-copy


【解决方案1】:

你必须收集递归的结果并返回它们。

def mycopy(mylist):
    newlist = []
    for element in mylist:
        if isinstance(element, list):
            newlist.append(mycopy(element))
        else:
            newlist.append(element)
    return newlist

这过于简化了,因为它只处理列表,而不是元组和字典。

请注意,“不是一维的”不是您测试整个列表的内容。它可以包含嵌套列表和其他对象的混合,因此您需要测试循环中的每个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 2010-11-16
    • 2012-07-08
    相关资源
    最近更新 更多