Как бы вы написали простую версию copy.deepcopy ()? - PullRequest
0 голосов
/ 12 марта 2020

Для вложенных списков, как будет выглядеть псевдокод, чтобы

 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

1 Ответ

1 голос
/ 12 марта 2020

Вы должны собрать результаты рекурсии и вернуть их.

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

Это слишком упрощено, поскольку оно касается только списков, а не кортежей и словарей.

Обратите внимание, что "не одномерный" - это не то, что вы тестируете для всего списка. Он может содержать смесь вложенных списков и других объектов, поэтому вам нужно проверить каждый элемент в l oop.

...