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