Python-更改一个数组中的元素会更改完全不同的数组中的元素

时间:2019-07-06 23:56:32

标签: python

我目前正在尝试为程序中的字母创建一个范围列表。我通过使用临时变量'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

1 个答案:

答案 0 :(得分:1)

将列表添加到另一个列表时,它不会自动进行复制。如果要这样做,则必须明确声明:

censors.append(censorRange.copy())