我目前正在尝试为程序中的字母创建一个范围列表。我通过使用临时变量'censorRange'来获取实例的范围,然后将该变量附加到'censors'变量中以在函数末尾返回来实现。
问题在于,当我更改“ censorRange”变量时,它也会更改“ censors”变量中的元素。举个例子: 最初,'censorRange'= [10,15],而'censors'= [[10,15]]。当我调试程序时,'censorRange'从'[10,15]'变为'[17,23]',那么'censors'也将变为[[17,23]]。然后,在程序结束时,检查员将给我[[17,23],[17,23]]而不是[[10,15],[17,23]]。
为什么会发生这种情况,如何解决该问题?我已经在下面附上了我一直在使用的代码。如果您有任何建议,请告诉我,一段时间以来,我对此感到沮丧。预先谢谢你。
代码:
censors = []
censorRange = [None, None]
for match in matches:
if((censorRange[0] != None) and (censorRange[1] != None)
and (match.span()[0] > censorRange[1])):
if(not lettersBetween(text, censorRange[1], match.span()[0], 5)):
censorRange[1] = match.span()[1]
censors.pop()
censors.append(censorRange)
censorRange[1] = match.span()[1]
else:
censors.append(match.span())
censorRange[0] = match.span()[0]
censorRange[1] = match.span()[1]
else:
censors.append(match.span())
censorRange[0] = match.span()[0]
censorRange[1] = match.span()[1]
return censors
答案 0 :(得分:1)
将列表添加到另一个列表时,它不会自动进行复制。如果要这样做,则必须明确声明:
censors.append(censorRange.copy())