我正在设计一个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"]
答案 0 :(得分:1)
另请参阅this answer,它是相同问题的另一种表示形式。
基本上,当您执行tempCode = mCode
时,并不是要复制mCode
,实际上是在对其进行另一个引用。此后您对tempCode
所做的任何事情也会影响原始内容,因此在任何给定时间,条件tempCode == mCode
都是正确的(因为它们是同一对象)。
您可能想复制mCode
的副本,可以通过以下两种方式之一进行复制:
tempCode = mCode.copy()
tempCode = mCode[:]
生成具有相同元素的不同列表,而不是相同列表