python复制嵌套列表

时间:2016-02-18 23:23:26

标签: python list copy packages

我们说我有列表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()可以解决这类问题,但我想知道是否有其他方法可以在不使用模块的情况下处理此问题。

1 个答案:

答案 0 :(得分:1)

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

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()