Почему функция append () меняет значение переменной на каждой итерации? - PullRequest
0 голосов
/ 17 марта 2020

Вот мой код.

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, но функция добавления изменяет список d в каждом итерация. Может кто-нибудь сказать, пожалуйста, как этого избежать?

1 Ответ

0 голосов
/ 17 марта 2020

Когда вы добавляете list n к list d, теперь у вас есть 2 способа получить доступ к вашему списку. через вашу переменную (n) и через list d (d[index]). оба указывают на один и тот же объект списка в памяти. поэтому, если вы измените список n одним способом (n[index] = value), вы увидите это изменение также, когда загляните внутрь list d.

Чтобы решить эту проблему, вместо добавления list n к list d, добавьте копию list n к list d.

Замените все d.append(n) на d.append(n.copy()).

...