Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:列表中相同的项被视为相同的_Python_List_Insert_Indexing_Append - Fatal编程技术网

Python:列表中相同的项被视为相同的

Python:列表中相同的项被视为相同的,python,list,insert,indexing,append,Python,List,Insert,Indexing,Append,我有一个python中的嵌套列表。第二个列表中的每个项目也是一个嵌套列表。我的目标是复制一个列表,将其插入同一索引,然后修改每个列表。因此,启动条件的示例: myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me]]] 在myList[1][2]上复制/插入: myList = [[first_list], [[element_1], [element_2, element_3], [dupli

我有一个python中的嵌套列表。第二个列表中的每个项目也是一个嵌套列表。我的目标是复制一个列表,将其插入同一索引,然后修改每个列表。因此,启动条件的示例:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me]]]
在myList[1][2]上复制/插入:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me], [duplicate_me]]]
这一切都很好。但是,当我运行append代码时:

 myList[1][2].append(new_element)
它将新元素附加到两个副本中,如下所示:

 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me, new_element], [duplicate_me, new_element]]]
在调用或索引元素的方式中是否存在一些奇怪的情况?我看到了一个潜在的解决方法(调用要复制到工作变量的项,在那里修改它,然后在同一点插入它),但这似乎不必要地复杂


谢谢

您很可能没有复制目标列表(*[duplicate_me]*),而是简单地将重复的引用添加到myList中的同一列表中


在将列表添加到myList之前,需要复制该列表。一种简单的方法是调用传递原始[duplicate\u me]

的列表构造函数。您很可能没有复制目标列表(*[duplicate\u me]*),而是简单地将重复的引用附加到同一列表到myList中


在将列表添加到myList之前,需要复制该列表。一种简单的方法是调用列表构造函数,传入原始的[duplicate_me]

myList[1][2]和myList[1][3]不仅仅具有相同的值,它们实际上是相同的列表。当你同时读取它们时,你看到的是内存中的同一个区域。所以,当你改变一个,你就是在改变另一个,因为两者实际上是完全相同的东西!你应该复制一份清单,而不是复制清单

下面是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]

使用其中一个来创建副本,一切都会恢复正常。

myList[1][2]和myList[1][3]不仅具有相同的值,它们实际上是相同的列表。当你同时读取它们时,你看到的是内存中的同一个区域。所以,当你改变一个,你就是在改变另一个,因为两者实际上是完全相同的东西!你应该复制一份清单,而不是复制清单

下面是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]

使用其中一个来创建副本,一切都会恢复正常。

问题在于如何创建
myList
(或至少是该子列表)。请关注这一点,以便我们知道这是一个重复的问题;-)问题在于如何创建
myList
(或至少创建该子列表)。请关注这一点,以便我们知道这是一个重复的问题;-)