首页 > 解决方案 > 为什么输入列表的值正在改变?

问题描述

因为我不知道应该给我的这种困惑起什么标题,所以我只是怀疑

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的值会在循环的每一步中出现?

标签: pythonpython-3.x

解决方案


您的问题在于这一行:

b = a 

这并不像你认为的那样。特别是,它不会复制a. 赋值后,两者都b引用a同一个对象。因此,对的任何更改b也反映在a

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

b = a[:]

推荐阅读