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()
.
假设我有列表 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()
.