为什么 append() 函数在每次迭代中都会更改变量的值?
Why is append() function changing value of variable in every iteration?
这是我的代码。
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。谁能告诉我如何避免这种情况?
当您将 list n
附加到 list d
时,您现在有 2 种方法来访问您的列表。通过您的变量 (n
),并通过 list d
(d[index]
)。两者都指向内存中的同一个列表对象。因此,当您以一种方式 (n[index] = value
) 更改列表 n 时,当您查看 list d
内部时,您也会看到更改。
要解决它,不要将 list n
附加到 list d
,而是将 list n
的副本附加到 list d
。
将所有 d.append(n)
替换为 d.append(n.copy())
。
这是我的代码。
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。谁能告诉我如何避免这种情况?
当您将 list n
附加到 list d
时,您现在有 2 种方法来访问您的列表。通过您的变量 (n
),并通过 list d
(d[index]
)。两者都指向内存中的同一个列表对象。因此,当您以一种方式 (n[index] = value
) 更改列表 n 时,当您查看 list d
内部时,您也会看到更改。
要解决它,不要将 list n
附加到 list d
,而是将 list n
的副本附加到 list d
。
将所有 d.append(n)
替换为 d.append(n.copy())
。