我在python中有一个嵌套列表。第二个列表中的每个项目也是一个嵌套列表。我的目标是复制一个列表,将其插入同一个索引,然后修改每个列表。因此,开始条件的示例:
myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me]]]
myList1的复制/插入
myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me], [duplicate_me]]]
一切都很好。但是,当我运行附加代码时:
myList[1][2].append(new_element)
它将新元素追加到两个重复项中,如下所示:
myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me, new_element], [duplicate_me, new_element]]]
元素被调用或索引的方式是否有什么奇怪的地方?我看到了一个潜在的解决方法(将项复制到一个工作变量中,在那里修改它,然后在同一点插入它),但这似乎是不必要的复杂。
谢谢!
发布于 2013-04-14 09:26:17
myList1和myList1不仅仅有相同的值,它们实际上是相同的列表。当你同时阅读它们的时候,你会看到记忆中相同的区域。所以,当你改变一个,你改变另一个,因为两者实际上是完全相同的事情!相反,做你所做的复制列表,你应该做一个副本。
下面是python shell中问题的一个例子:
>>> mylist = [1, 2, 3]
>>> newlist = mylist
>>> newlist.append(4)
>>> newlist
[1, 2, 3, 4]
>>> mylist
[1, 2, 3, 4]
解决这一问题的一个常见方法是使用以下技巧之一:
>>> mylist = [1, 2, 3]
>>> newlist = mylist[:] # OR :
>>> newlist = [x for x in mylist]
>>> newlist.append(4)
>>> newlist
[1, 2, 3, 4]
>>> mylist
[1, 2, 3]
第二行和第三行将创建列表的副本。如果我需要复制一个2D列表,我倾向于像这样将两者结合在一起:
>>> newlist = [x[:] for x in mylist]
使用其中一个来创建你的复制,一切都会好起来。
发布于 2013-04-14 09:14:17
您很可能不复制目标列表(*duplicate_me*),而是简单地将重复的引用添加到myList中。
在将列表添加到myList之前,您需要复制它。一个简单的方法是调用传入原始duplicate_me的列表构造函数
https://stackoverflow.com/questions/16001780
复制相似问题