为什么输入列表的值会发生变化?

时间:2018-06-01 14:16:35

标签: python python-3.x

因为我不知道应该给我的这种混乱题目,所以我只是怀疑

a = [1,2,3,4,5]
b = a 

for i in range(len(a)):
    c = (i - 4)
    print(a)
    print(b)
    b[c] = a[i]
    print(a)
    print(b)

输出

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 1, 3, 4, 5]
[1, 1, 3, 4, 5]
[1, 1, 3, 4, 5]
[1, 1, 3, 4, 5]
[1, 1, 1, 4, 5]
[1, 1, 1, 4, 5]
...

为什么列表a的值会在循环的每个步骤中得到?

1 个答案:

答案 0 :(得分:2)

你的问题在于这一行:

b = a 

这不符合你的想法。特别是,它制作a的副本。分配后,ba都引用同一个对象。因此,对b的任何更改也会反映在a中。

强制复制的一种方法是使用切片语法:

b = a[:]