首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:复制列表中的列表

Python:复制列表中的列表
EN

Stack Overflow用户
提问于 2013-07-06 05:27:20
回答 4查看 528关注 0票数 19

希望有人能帮我。

我是Python的新手,我正在努力找出我做错了什么。

我已经搜索并发现Python变量可以链接在一起,这样更改一个变量就可以更改另一个变量,并且我已经使用id()函数进行了大量测试,以掌握这个概念。但我似乎发现了一个例外我希望有人能解释。

首先,下面的工作如预期的那样制作了一个列表的独立副本。

代码语言:javascript
运行
复制
>>> a = [0,0]
>>> b = a[:]
>>> print a is b
False
>>> b[0]=1
>>> print a
[0,0]
>>> print b
[1,0]

但是如果我稍微改变一下,使a被列在一个列表中,它就会改变...

代码语言:javascript
运行
复制
>>> a = [[0,0],[0,0]]
>>> b = a[:]
>>> print a is b
False
>>> b[0][0]=1
>>> print a
[[1, 0], [0, 0]]
>>> print b
[[1, 0], [0, 0]]

现在我们看到,b的任何更新也将应用于a,但是print a is b的结果返回False??我也对id()进行了检查,所有东西都说它们彼此独立,但当我更新一个时,同样适用于另一个??

有人能解释这个吗??

注意到我正在运行http://labs.codecademy.com/#:workspace的这些,所以我的第一个想法是这只是他们网站上的一个bug,但我不知道?

编辑:

到目前为止,感谢你们所有人的精彩回答。太快了!我知道以前可能有人问过这个问题,但搜索起来很困难。

因为所有的答案都是正确的,所以我会等一天再阅卷。拥有最多+1的人将获得分数:)

EN

回答 4

Stack Overflow用户

发布于 2013-07-06 05:30:06

a是一个列表列表。当您执行b=a[:]时,您创建了一个新列表,但复制了元素。所以b是一个不同的列表,但是元素(子列表)是相同的。

票数 4
EN

Stack Overflow用户

发布于 2013-07-06 05:32:00

在这两种情况下,您都创建了一个独立的列表。所以a is b总是假的。

在第一种情况下,您将一些其他值放入其中一个列表中。

在第二种情况下,两个列表都包含相同的值。

这就好像你会写下

代码语言:javascript
运行
复制
l = []
a = [l, l]
b = [l, l]

a is not b,但它们包含相同的数据。

如果您现在修改l,则可以通过所有a[0]a[1]b[0]b[1]查看此更改。

票数 3
EN

Stack Overflow用户

发布于 2013-07-06 05:38:46

虽然a is b返回False,但a[0] is b[0]返回True。因此,当您更改b[0]时,您必然会更改a[0]

代码语言:javascript
运行
复制
>>> a = [[0,0],[0,0]]
>>> b = a[:]

>>> # a[0] is b[0] 
>>> print a[0] is b[0]
True

>>> a.append('more stuff')
>>> print a
[[0, 0], [0, 0], 'more stuff']
>>> print b
[[0, 0], [0, 0]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17497067

复制
相关文章

相似问题

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