Python-不使用复制模块的深度复制

Python-不使用复制模块的深度复制,python,python-3.x,Python,Python 3.x,本质上,问题在于创建一个函数deepcopy(L),该函数将返回列表L的深度副本。但是,我们被告知不要使用copy模块或其中的任何函数 我是一个入门课的初学者,我真的在努力学习这门课。我们唯一真正被告知的是,我们应该使用递归来解决这个问题,但在被困这么久之后,我想我会寻求帮助 在课堂上没有弄清楚,也没有真正得到明确的答案,现在教授正在继续学习,因此非常感谢任何帮助。谢谢 也许,你正在寻找这样的东西: def mydeepcopy(L): if isinstance(L, list):

本质上,问题在于创建一个函数deepcopy(L),该函数将返回列表L的深度副本。但是,我们被告知不要使用copy模块或其中的任何函数

我是一个入门课的初学者,我真的在努力学习这门课。我们唯一真正被告知的是,我们应该使用递归来解决这个问题,但在被困这么久之后,我想我会寻求帮助


在课堂上没有弄清楚,也没有真正得到明确的答案,现在教授正在继续学习,因此非常感谢任何帮助。谢谢

也许,你正在寻找这样的东西:

def mydeepcopy(L):
    if isinstance(L, list):
        ret = []
        for i in L:
            ret.append(mydeepcopy(i))
    elif isinstance(L, (int, float, type(None), str, bool)):
        ret = L
    else:
        raise ValueError("Unexpected type for mydeepcopy function")

    return ret

lst = [ [1,2,3], [4,5,6], [7,8,9] ]
copy = mydeepcopy(lst)

print("Original Data: %s" % (lst))
print("Original IDs: %s = %s" % (id(lst),[ id(i) for i in lst ]))

print("Copied Data: %s" % (copy))
print("Copied IDs: %s = %s" % (id(copy),[ id(i) for i in copy ]))
可能的产出:

Original Data: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Original IDs: 140637274065288 = [140637274064712, 140637274064776, 140637274065352]
Copied Data: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Copied IDs: 140637274065480 = [140637274065416, 140637274065160, 140637274065096]

也许,你正在寻找这样的东西:

def mydeepcopy(L):
    if isinstance(L, list):
        ret = []
        for i in L:
            ret.append(mydeepcopy(i))
    elif isinstance(L, (int, float, type(None), str, bool)):
        ret = L
    else:
        raise ValueError("Unexpected type for mydeepcopy function")

    return ret

lst = [ [1,2,3], [4,5,6], [7,8,9] ]
copy = mydeepcopy(lst)

print("Original Data: %s" % (lst))
print("Original IDs: %s = %s" % (id(lst),[ id(i) for i in lst ]))

print("Copied Data: %s" % (copy))
print("Copied IDs: %s = %s" % (id(copy),[ id(i) for i in copy ]))
可能的产出:

Original Data: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Original IDs: 140637274065288 = [140637274064712, 140637274064776, 140637274065352]
Copied Data: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Copied IDs: 140637274065480 = [140637274065416, 140637274065160, 140637274065096]

这是一个单行答案:

newList = [L[i] for i in range(len(L))]

这是一个单行答案:

newList = [L[i] for i in range(len(L))]

Deepcopy可以使用这一行方法完成

def deep_copy(source_list):
    dest_list = source_list[:]
    return dest_list

它为您提供了更小的功能并缩短了处理时间。

可以使用此单行方法完成深度复制

def deep_copy(source_list):
    dest_list = source_list[:]
    return dest_list

它为您提供了更小的功能并缩短了处理时间。

我们在此回答具体问题。“任何帮助都将不胜感激”不是问题。你需要与某人进行对话,而堆栈溢出不是这样做的地方。如果你想在这方面获得帮助,你需要向我们展示你迄今为止编写的代码,并解释它的错误之处。对不起,这是我第一次使用该网站。老实说,我甚至不知道从哪里开始做这项工作,所以我没有真正编写代码。你有编写递归函数的经验吗?完全初学者通常不会编写递归代码。。。这项任务并不难,但也有一些陷阱。特别是,你需要小心使用字符串。是的,每个人都这么告诉我。教授故意对我们施加比你在介绍课上预期的更大的压力,因为他认为这是我们学习任何东西的唯一途径。然而,这就像学习西班牙语字母表,然后被告知去写一篇文章。我们在这里回答具体问题。“任何帮助都将不胜感激”不是问题。你需要与某人进行对话,而堆栈溢出不是这样做的地方。如果你想在这方面获得帮助,你需要向我们展示你迄今为止编写的代码,并解释它的错误之处。对不起,这是我第一次使用该网站。老实说,我甚至不知道从哪里开始做这项工作,所以我没有真正编写代码。你有编写递归函数的经验吗?完全初学者通常不会编写递归代码。。。这项任务并不难,但也有一些陷阱。特别是,你需要小心使用字符串。是的,每个人都这么告诉我。教授故意对我们施加比你在介绍课上预期的更大的压力,因为他认为这是我们学习任何东西的唯一途径。然而,这就像学习西班牙语字母表,然后被告知去写一篇文章。