当前位置:  开发笔记 > 编程语言 > 正文

Python 3.5列表理解修改原始

如何解决《Python3.5列表理解修改原始》经验,为你挑选了1个好方法。

我老了,没留下头发了.我已经阅读了与我在SO上可以找到的类似问题的答案.我有以下代码:

a = [[1,2],[3,4],[4,5]]
b = ['a','b','c']
print('a:',a)
print('b:',b)
c = a[:]
print('c == a:', c==a)
print('c is a:',c is a)
print('id(c) = id(a):', id(c)==id(a))
[x.extend(b) for x in c]
print('c after:',c)
print('a after:',a)`

输出是:

a: [[1, 2], [3, 4], [4, 5]]
b: ['a', 'b', 'c']
c == a: True
c is a: False
id(c) = id(a): False
c after: [[1, 2, 'a', 'b', 'c'], [3, 4, 'a', 'b', 'c'], [4, 5, 'a', 'b', 'c']]
a after: [[1, 2, 'a', 'b', 'c'], [3, 4, 'a', 'b', 'c'], [4, 5, 'a', 'b', 'c']]

我正在寻找显示为'c after:'的结果,但我不明白为什么a也被修改了?!我也试过了

c = list(a)

c = copy.copy(a)

当然,简单的c = a不能按预期工作.我错过了什么?!谢谢.



1> Piotr Dabkow..:

这是因为您不复制列表中的元素.内部列表a不会被复制.因此,您的extend方法会影响两个列表中的元素 您应该使用c = copy.deepcopy(a)以复制嵌套元素.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有