簡體   English   中英

Python列表等效

[英]Python List Equivalence

當我更改列表的值時,其他列表也將更改。 我不明白他們為什么這么做。

def successors(state):

    stateup=state[:]
    statedown=state[:]
    stateright=state[:]
    stateleft=state[:]


    for i in range(len(state)):
        for j in range(len(state)):
            if state[i][j]==0:
                x=i
                y=j

    stateup[x][y]=stateup[x+1][y]
    stateup[x+1][y]=0
    statedown[x][y]=statedown[x-1][y]
    statedown[x-1][y]=0
    stateright[x][y]=stateright[x][y-1]
    stateright[x][y-1]=0
    stateleft[x][y]=stateleft[x][y+1]
    stateleft[x][y+1]=0
    if x==0:
        if y==0:
            return [stateleft,stateup]
        elif y==len(state)-1:
            return [stateright,stateup]
        else:
            return [stateright,stateleft,stateup]
    elif x==len(state)-1:
        if y==0:
            return [stateleft,statedown]
        elif y==len(state)-1:
            return [stateright,statedown]
        else:
            return [stateright,stateleft,statedown]
    else:
        return [stateright,stateleft,statedown,stateup]

print successors([[1,2,3,4],[5,6,0,8],[9,10,11,12],[13,14,15,16]])

變量stateup statedown ...您已經定義都是淺拷貝state 因為您使用了[:] ,所以它只是列表的淺表副本。 因此,更改其中之一將更改所有這些。 您需要使用copy.deepcopy(...)深度復制它們。 有關此問題的完整說明,請深度閱讀Python中的列表
和這篇文章http://www.python-course.eu/deep_copy.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM