嵌套for循环python中打印(2d列表)的不稳定行为(在循环中交换列表项)

嵌套for循环python中打印(2d列表)的不稳定行为(在循环中交换列表项),python,Python,我尝试在二维列表中的两个嵌套for循环中,用2替换1,用1替换2。我还将在两个循环中显示前后列表- def train(cls, isSomethingTrue): #isSomethingTrue is always false print('before {0}'.format(cls.xtrain)) for i in range(len(cls.xtrain)): print('before {0}'.format(cls.xtrain[i]))

我尝试在二维列表中的两个嵌套for循环中,用2替换1,用1替换2。我还将在两个循环中显示前后列表-

def train(cls, isSomethingTrue): #isSomethingTrue is always false
    print('before {0}'.format(cls.xtrain))
    for i in range(len(cls.xtrain)):
        print('before {0}'.format(cls.xtrain[i]))
        cls.ytrain.append([1, 0])
        if(not isSomethingTrue):
            for j in range(len(cls.xtrain[i])):
                if cls.xtrain[i][j] == 1:
                    cls.xtrain[i][j] = 2
                    continue
                elif cls.xtrain[i][j] == 2:
                    cls.xtrain[i][j] = 1
                    continue
        print('after {0}'.format(cls.xtrain[i]))
    print('after {0}'.format(cls.xtrain))
问题是外循环只显示要交换的偶数索引(内循环按预期工作)。怎么可能呢

下面是截图-


请提供一份说明您的问题的报告。我试着在你的程序中填入空格,让它运行,但我的最终“after”与你的完全不匹配。我看不出代码有任何错误。是否
cls.xtrain
多次包含相同的列表?Like
li=[1,2];xtrain=[li,li]
@Kevin奇怪的是,我只是尝试在方法内部初始化
cls.xtrain
,然后它就工作了!但是当
cls.xtrain
在其他地方更新时(在另一个类的另一个方法中),它仍然不会更新。我将尝试创建另一个试图捕获方法调用的项目,因为此项目太复杂,无法在此处发布。@Rawing Yes'cls.train'通常更新为'cls.xtrain.append(instanceOfSomeOtherClass.SomeList)
。这是一个很好的提示,我将尝试深度复制
SomeList`.@Rawing是的,就是这样!在添加之前对列表进行深度复制似乎已经解决了这个问题。仍然不确定为什么内部循环工作,为什么列表项不都是相同的,但它现在可以工作了。如果您愿意,可以随意添加您的评论作为答案。