python 复制嵌套列表

python copying nested lists

假设我有列表 a,我想将其复制到 b 以便我可以更改 a 但保持其原始形式不变:

我使用传统的list()函数...

a = [1,[2,3],4]
b = list(a)

print id(a), id(b) 
# 2941136 35748600

a和b的id不同,复制成功。但是 list() 没有复制子列表——改变 a[1][0] 将改变 b

a[1][0]=3
print b
# [1, [3, 3], 4]

我知道 copy.deepcopy() 可以解决此类问题,但我想知道是否有其他方法可以在不使用模块的情况下处理此问题。

复制嵌套列表的一种方法(以您的示例为例)是:

def deepcopy_nested_list(data):
    out = []
    for el in data:
        if isinstance(el, list):
            out.append(deepcopy_nested_list(el))
        else:
            out.append(el)
    return out

该函数将列表复制到一个新的列表,然后递归复制所有嵌套列表,实现深拷贝。

请注意,这只会创建列表和不可变对象的副本(例如,dicts 不会被复制)。它只展示了如何实现这样一个功能的想法,并没有给出完整的实现。

在现实世界的代码中你当然会使用 copy.deepcopy().