这个问题已经在这里有了答案 :
分配后列表意外更改。如何克隆或复制它以防止这种情况? (21个回答)
在Python中复制嵌套列表
(2个答案)
2年前关闭。
我正在使用python 3.4.1。
对于单个列表a=[1,2]
,如果我对其进行复制,则b = a.copy()
在更改中的项目时b
,不会更改中的项目a
。
但是,当我定义一个列表列表(实际上是一个矩阵)时a = [[1,2],[3,4]]
,当我分配时b = a.copy()
。我列出的内容b
实际上会影响a
。
我检查了他们的地址,他们不一样。
谁能告诉我为什么?
ps:我所做的是b[0][0] = x
,并且a中的项目也已更改。
从该copy
模块的文档中:
浅表复制和深度复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关:
- 浅表副本会构造一个新的复合对象,然后(在可能的范围内)将对原始对象中找到的对象的引用插入其中。
- 深层副本将构造一个新的复合对象,然后递归地将原始对象中发现的对象的副本插入其中。
调用常规时,copy.copy()
您正在执行 浅表
复制。这意味着在列表列表的情况下,您将获得外部列表的新副本,但它将包含原始内部列表作为其元素。相反,您应该使用copy.deepcopy()
,这将创建外部列表和内部列表的新副本。
您在第一个使用示例中没有注意到这一点的原因copy([1,2])
是,像这样的基元int
是不可变的,因此,如果不创建新实例就无法更改其值。如果列表的内容改为是可变对象(如列表或具有可变成员的任何用户定义的对象),则在列表的两个副本中都将看到这些对象的任何变异。
问题内容: 我打算初始化一个长度为n的列表列表。 但是,这以某种方式将列表链接在一起。 我希望有这样的东西: 有任何想法吗? 问题答案: 问题在于它们在内存中都是完全相同的列表。当使用语法时,得到的是n许多x对象的列表,但是它们都是对同一对象的引用。它们不是不同的实例,而是n对同一实例的引用。 要列出3个不同的列表,请执行以下操作: 这为你提供了3个单独的实例,这是你想要的 类似于 虽然类似于:
我想把两个列表合并成一个列表列表。反之亦然。我找不到任何工作,我对Python非常陌生 例子: 如何将S拆分回原来的S1和S2?示例:
我试图在列表中的列表中插入一些东西,但是我不知道该怎么做。 例如,我有一个列表列表: 我想将插入子列表,索引为0,位于元素之后,所以它看起来像这样:
问题内容: 我想从列表列表中删除所有重复列表。 所以我有一个这样的清单清单。 我希望有: 我不知道该怎么办。 谢谢 问题答案: 您可以使用一组: 或者,如果您更喜欢列表推导/生成器: 最后,如果顺序很重要,则可以始终对b进行排序:
问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项
< code>list_of_lists=[[1,2,3],[4,5,6]] < br > < code > list _ to _ add =[" A "," B "," C"] 我希望结果是list_of_lists会变成: 谢谢!
问题内容: 如果想基于每个嵌套列表的第一个元素评估重复项,谁能提出一个好的解决方案从嵌套列表中删除重复项? 主列表如下所示: 如果已经在第一位置出现了另一个具有相同元素的列表,那么我想删除该列表并得到以下结果: 您可以建议一种算法来实现此目标吗? 问题答案: 您是否关心保留订单/删除了哪些重复项?如果不是,则: 会做的。如果您想保留订单并想保留第一个订单,则:
我试图连接一个流的列表并处理它。 这里我得到了几个B的列表。