如何解决为什么foo.appendbar影响列表列表中的所有元素? [重复]
| 这个问题已经在这里有了答案:解决方法
这是因为该列表包含对对象的引用。您的列表不包含
[[1 2 3] [1 2 3]]
,而是[<reference to b> <reference to b>]
。
更改对象时(通过将某些内容附加到something2ѭ),更改的是对象本身,而不是包含对象的列表。
为了获得想要的效果,列表a
必须包含b
的副本,而不是对b
的引用。要复制列表,您可以使用范围[:]
。例如, :
>>> a=[]
>>> b=[1]
>>> a.append(b[:])
>>> a.append(b[:])
>>> a[0].append(2)
>>> a[1].append(3)
>>> print a
[[1,2],[1,3]]
, 关键是这一部分:
a.append(b)
a.append(b)
您要追加两次相同的列表,所以a[0]
和a[1]
都是对同一列表的引用。
在第二个示例中,每次调用诸如a.append([b])
之类的append时,您都在创建新列表,因此它们是用相同的float值初始化的单独对象。
, 为了制作列表的浅表副本,习惯用法是
a.append(b[:])
如果将其加倍,将导致拥有列表b
的两个新颖副本,而不会给您报告的别名错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。