首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python:列表中相同的项被视为相同的

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

Stack Overflow用户
提问于 2013-04-14 17:07:28
回答 2查看 135关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me]]]

myList1的复制/插入

代码语言:javascript
代码运行次数:0
运行
复制
 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me], [duplicate_me]]]

一切都很好。但是,当我运行附加代码时:

代码语言:javascript
代码运行次数:0
运行
复制
 myList[1][2].append(new_element)

它将新元素追加到两个重复项中,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
 myList = [[first_list], [[element_1], [element_2, element_3], [duplicate_me, new_element], [duplicate_me, new_element]]]

元素被调用或索引的方式是否有什么奇怪的地方?我看到了一个潜在的解决方法(将项复制到一个工作变量中,在那里修改它,然后在同一点插入它),但这似乎是不必要的复杂。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-14 17:26:17

myList1和myList1不仅仅有相同的值,它们实际上是相同的列表。当你同时阅读它们的时候,你会看到记忆中相同的区域。所以,当你改变一个,你改变另一个,因为两者实际上是完全相同的事情!相反,做你所做的复制列表,你应该做一个副本。

下面是python shell中问题的一个例子:

代码语言:javascript
代码运行次数:0
运行
复制
>>> mylist = [1, 2, 3]
>>> newlist = mylist
>>> newlist.append(4)
>>> newlist
[1, 2, 3, 4]
>>> mylist
[1, 2, 3, 4]

解决这一问题的一个常见方法是使用以下技巧之一:

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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列表,我倾向于像这样将两者结合在一起:

代码语言:javascript
代码运行次数:0
运行
复制
>>> newlist = [x[:] for x in mylist]

使用其中一个来创建你的复制,一切都会好起来。

票数 3
EN

Stack Overflow用户

发布于 2013-04-14 17:14:17

您很可能不复制目标列表(*duplicate_me*),而是简单地将重复的引用添加到myList中。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16001780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档