Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中自动列出更改_Python_Python 3.x_List - Fatal编程技术网

在python中自动列出更改

在python中自动列出更改,python,python-3.x,list,Python,Python 3.x,List,下面的代码正在自动更改列表K的值,请帮助我了解原因 1 4 1 2 4 3 我给出了上述输入 输出是这样的 [1, 2, 3, 4] [1, 2, 3, 4] 1 [1, 2, 3, 4] 2 1 1 [1, 2, 3, 4] 2 2 2 [1, 2, 3, 4] 2 3 4 [1, 2, 3, 4] 2 4 3 [1, 2, 4, 3] [1, 2, 4, 3] 1 [1, 2, 4, 3] 2 1 1 [1, 2, 4, 3] 2 2 2 [1, 2, 4, 3] 2 4 4 [1, 2,

下面的代码正在自动更改列表K的值,请帮助我了解原因

1
4
1 2 4 3
我给出了上述输入

输出是这样的

[1, 2, 3, 4]
[1, 2, 3, 4] 1
[1, 2, 3, 4] 2
1 1
[1, 2, 3, 4] 2
2 2
[1, 2, 3, 4] 2
3 4
[1, 2, 3, 4] 2
4 3
[1, 2, 4, 3]
[1, 2, 4, 3] 1
[1, 2, 4, 3] 2
1 1
[1, 2, 4, 3] 2
2 2
[1, 2, 4, 3] 2
4 4
[1, 2, 4, 4] 2
4 3
[1, 2, 4, 4]
[1, 2, 4, 4]
在最后的步骤中,列表k的值会自动更改

这是在PyPy3和Python3.7上完成的

t=int(input())
while t!=0:
    t-=1
    n=int(input())
    h=[0]*n
    lt=[0]*n
    c=0
    l=[int(i) for i in input().split()]
    k=[i for i in range(1,n+1)]
    print(k)
    while c!=7:
        print(k, end=" ")
        print("1")
        c+=1
        for i in range(n):
            print(k, end=" ")
            print("2")
            lt[l[i]-1]=k[i]
            print(k[i],end =" ")
            print(l[i])
        k=lt
        print(k)
        for i in range(n):
            if k[i]==l[i] and h[k[i]-1]==0:
                h[k[i]-1]=c
    print(*h,sep=" ")

为了实现所需的功能,您需要向k提供列表的新副本

Python中的一切都是对象。 当您执行
k=lt
时,实际上是将变量
lt
中包含的引用提供给
k

分配后,您可以通过打印(id(k)、id(lt))检查上述事实

有许多方法可以从现有列表创建新列表。对于大多数问题,您可以参考stackoverflow问题


对于上述问题,请将代码中的第19行(
k=lt
)替换为
k=lt.copy()
k=list(lt)
请不要介意最终输出,因为列表k不正确
k=lt
使
k
引用与
lt
相同的列表对象;它不会使
k
引用
lt
的当前值的副本。请尝试创建一个有问题的最小示例,这样我们就不必进行所有检查。请参见,但k值仅在循环结束后更新,这无关紧要;下次进入该循环时,
lt
仍指向相同的列表;您没有为
lt
创建要引用的新列表。谢谢,这确实有帮助