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

我正在尝试使函数具有嵌套列表,并删除to_eliminate中所有出现的元素。我了解如果我执行了new_list = input_list,但是我却在执行new_list = input_list [:],为什么会有这个问题。我什至检查了他们的身份证,他们绝对不同。我不想修改原始列表。

Both segments of code do not work.
When I return both input_list and new_list,I get the same result. I don't understand why as I copied the original list,and they are two different objects.
hhqqhhhhqqhh 回答:为什么我的原始嵌套列表在复制时会发生变化?

您的基本问题是input_list[:]仅是浅表副本;如果它本身包含可变内容(在本例中为嵌套list),则它与可变数据共享别名,并且在“副本”中对其进行修改仍会修改原始数据的内容结构。

如果您不能使用copy模块,并且已经知道list的2D排列,只需自己执行深度复制,然后进行以下更改:

new_list = input_list[:]

收件人:

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

,并确保使用return new_list而不是input_list。该列表理解只是手动将list second 层的浅表副本复制到全新的list中。您可以将其进一步扩展到更高级别的嵌套,但是随着您的深入,它会变得越来越荒谬。

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

new_list = copy.deepcopy(input_list)

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

,

这应该有效,如果您需要内联,请告诉我,我会更新答案,根据您的问题我不确定:

input_list = [[1,2,3,4,5,6,7,8,9,0],[3,[1,5]]
remove_list = [1,0]

def eliminate(input_list,remove_list):
  new_list=[]
  for item in input_list:
    new_list.append(list(set(item) - set(remove_list)))
  return new_list

new_list = eliminate(input_list,remove_list)

new_list
[[2,9],[9,5],[2,5]]
本文链接:https://www.f2er.com/3120329.html

大家都在问