关于python:为什么输入列表的值会发生变化?

Why value of input list is getting changed?

本问题已经有最佳答案,请猛点这里访问。

因为我不知道应该给我的这个困惑赋予什么头衔,所以我只是怀疑一下

1
2
3
4
5
6
7
8
9
10
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
6
7
8
9
[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]
...

为什么列表EDOCX1[0]的值进入循环的每个步骤?


你的问题在于这一行:

1
b = a

这并不像你想象的那样。特别是,它不复制a。任务完成后,ba都指同一对象。因此,对b的任何更改也反映在a中。

强制执行应复制的一种方法是使用slice语法:

1
b = a[:]