我老了,没留下头发了.我已经阅读了与我在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不能按预期工作.我错过了什么?!谢谢.
这是因为您不复制列表中的元素.内部列表a
不会被复制.因此,您的extend
方法会影响两个列表中的元素 您应该使用c = copy.deepcopy(a)
以复制嵌套元素.