为什么append()函数在每次迭代中都会更改变量的值?

时间:2020-03-17 06:23:38

标签: python-3.x lru

这是我的代码。

print("enter string")
s=[int(i) for i in input().split()]
r=s.copy()

n=[' ',' ',' ']
d=[]

def rep(index):
    temp=[]
    for i in range(3):
        if(s[index-i-1] not in temp):
            temp.append(s[index-i-1])
    if(len(temp)!=3):
        temp.append(s[index-4])
    return temp[-1]

for i in range(len(s)):
    if(i<3):
        n[i]=s[i]
        print(s[i])
        print(n)
        d.append(n)
        print(d)
    elif(s[i] in n):
        print(s[i])
        print(n)
        d.append(n)
        print(d)
        continue
    else:
        n[n.index(rep(i))]=s[i]
        print(s[i])
        print(n)
        d.append(n)
        print(d)
print(d)

list n的值根据LRU而变化,并且该列表被追加到list d中,但是append函数在每次迭代中都更改列表d。有人可以告诉我如何避免这种情况吗?

1 个答案:

答案 0 :(得分:1)

list n附加到list d时,现在有两种访问列表的方法。通过您的变量(n)和list dd[index])。两者都指向内存中的同一列表对象。因此,当您以一种方式(n[index] = value更改列表n时,当您浏览list d时也会看到更改。

要解决此问题,请不要将list n的副本附加到list d

将所有list n替换为list d