临时变量的更改正在影响从

时间:2019-10-26 17:13:05

标签: python-3.x

我正在设计一个Mastermind游戏,该游戏基本上会比较2个列表并标记相似之处。当在正确的位置找到一种颜色时,会添加一个标记,以使位置正确,并在参考列表中找到该项目。参考列表正在从另一个函数中馈送数组。问题在于标记,因为对引用列表所做的任何更改也会改变原始数组,我不希望发生这种情况

tempCode = mCode  #mCode is the array combination randomly generated from another function 

for i in range (len(uCode)): #user input array
        for j in range (len(tempCode)): #temp array
            if uCode[i] == tempCode[j]: # compare individual chars
                if i == j: #compare position
                    flagMark = "*" 
                    tempCode.insert(j+1, "x") #problem starts here
                    tempCode.remove(tempCode[j])
                    fCode.append(flagMark)

到达插入位置时,tempCode和mCode都会发生意外变化。

代码的编写方式应是用户输入相同颜色的组合,从而检查chras(颜色只是字母)和位置,然后用“ x”标记它们。

就目前而言

tempCode.insert(j+1, "x")

数组将更改为

mCode = ["B","R","x","G","Y"]
tempCode = ["B","R","x","G","Y"]

当我只想要

mCode = ["B","R","G","Y"]
tempCode = ["B","R","x","G","Y"]

1 个答案:

答案 0 :(得分:1)

另请参阅this answer,它是相同问题的另一种表示形式。

基本上,当您执行tempCode = mCode时,并不是要复制mCode,实际上是在对其进行另一个引用。此后您对tempCode所做的任何事情也会影响原始内容,因此在任何给定时间,条件tempCode == mCode都是正确的(因为它们是同一对象)。

您可能想复制mCode的副本,可以通过以下两种方式之一进行复制:

tempCode = mCode.copy()
tempCode = mCode[:]

生成具有相同元素不同列表,而不是相同列表