gpt4 book ai didi

python - 为什么复制时我的原始嵌套列表会发生变化?

转载 作者:行者123 更新时间:2023-12-01 00:23:18 27 4
gpt4 key购买 nike

我正在尝试创建一个给定嵌套列表的函数,并删除 to_eliminate 中所有出现的元素。我明白为什么我会遇到这个问题 new_list = input_list ,但我在做new_list = input_list[:] 。我什至检查了他们的身份证,他们肯定是不同的。我不想修改我的原始列表。

这两段代码都不起作用。当我同时返回input_list时和new_list ,我得到相同的结果。我不明白为什么,因为我复制了原始列表,并且它们是两个不同的对象。

最佳答案

你的根本问题是 input_list[:] 只有浅拷贝;如果它本身包含可变内容(在本例中为嵌套列表),则它会与可变数据共享别名,并且在“副本”中修改它仍然会修改原始数据结构。

如果您无法使用copy模块,并且您已经获得了已知的列表的二维排列,则只需自己执行深层复制,并更改:

new_list = input_list[:]

至:

new_list = [sublst[:] for sublst in input_list]

并确保返回new_list而不是input_list。该列表理解只是手动将列表第二层浅拷贝到一个全新的列表中。您可以将其进一步扩展到更高级别的嵌套,但越深入,它就会变得越来越荒谬。

真正的答案是让 Python 为您完成工作,使用 copy.deepcopy,使其:

new_list = copy.deepcopy(input_list)

无论您的数据结构嵌套有多深,它都会起作用。

关于python - 为什么复制时我的原始嵌套列表会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58811129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com