【问题标题】:Duplication of one list into another list [duplicate]将一个列表复制到另一个列表中[重复]
【发布时间】:2017-11-02 11:13:03
【问题描述】:

我没有对 list a[] 和 list coy 进行任何分配,这有点令人困惑, 仍然在输出上,我得到 ,list a,与 ,list coy 相同。我的意思是,当我使用 coy=a[:] 时会发生这种情况。谢谢。

T=int(input())
for i in range(T):
    a=[]
    z=[]
    f=0
    count=0
    n,m=map(int,input().split())
    for i in range(n):
        a+=[list(map(int,input().split()))]
    coy=a[:]
    print(coy,'coy')#debug
    print(a,'a')#debug
    while(f==0):
        for i in range(n):
            for j in range(m):
                if i==0 and j==0:
                    coy[0][0]=max(a[i][j+1],a[i+1][j+1],a[i+1][j])
                elif i==0 and j==m-1:
                    coy[i][j]=max(a[i][j-1],a[i+1][j],a[i+1][j-1])
                elif i==n-1 and j==0:
                    coy[i][j]=max(a[i][j+1],a[i-1][j],a[i-1][j+1])
                elif i==n-1 and j==m-1:
                    coy[i][j]=max(a[i-1][j],a[i][j-1],a[i-1][j-1])
                elif j==0:
                    coy[i][j]=max(a[i][j+1],a[i-1][j],a[i+1][j],a[i-1][j+1],a[i+1][j+1],)
                elif j==m-1:
                    coy[i][j]=max(a[i][j-1],a[i-1][j],a[i-1][j-1],a[i+1][j],a[i+1][j-1])
                elif i==0:
                    coy[i][j]=max(a[i][j-1],a[i+1][j],a[i+1][j-1],a[i][j+1],a[i+1][j+1])
                elif i==n-1:
                    coy[i][j]=max(a[i][j-1],a[i-1][j-1],a[i-1][j],a[i-1][j+1],a[i][j+1])

                else:
                    coy[i][j]=max(a[i][j-1],a[i-1][j],a[i-1][j-1],a[i+1][j],a[i+1][j-1],a[i][j+1],a[i-1][j+1],a[i+1][j+1])
                    print('inside else','coy',coy,'a',a)#debug
        if(coy==a):
            print(coy,'coy')#debug
            print(a,'a')#debug

            count=0
            break

        for x in range(n):
            print('*')#debug
            z+=set(copy[x])
        print(z)
        if len(set(z))==1:
            f=1
        a=copy[:] 
        count+=1
        print('**********')#debug
    print(count)        

我使用了一些打印语句来查看流程,并且 ,list a 的值在分配列表 coy 索引期间发生了变化,理想情况下不应该这样做。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    使用id() 函数检查两个列表“a”和“coy”的身份。两个列表可能相同,因为两个对象都引用相同的数据。 在此处查看将一个列表复制到另一个列表的所有其他可能性。 How to clone or copy a list?

    【讨论】:

    • 列表“a”和“coy”都有不同的ID。
    • 查看Python列表中浅拷贝和深拷贝的答案。 List Copy1, List Copy2
    猜你喜欢
    • 2012-07-21
    • 2010-11-20
    • 1970-01-01
    • 2012-08-12
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多