我正在编写代码,变量开始表现得很奇怪,并被分配给我认为它们不应该分配的东西。因此,我决定将情况降低到最小的复杂性以解决我的疑问,这就是发生的事情:
以下代码:
a = [2]
def changeA(c):
d = c
d[0] = 10
return True
changeA(a)
print(a)
打印“[10]”。这对我来说没有意义,因为在第一次分配之后我从未将列表“a”分配为任何内容。在函数 changeA 内部,局部变量 d 被分配为函数的输入,在我看来,这种分配是双向发生的,甚至改变了“外部”。如果是这样,为什么?如果不是,为什么会这样?
我还注意到代码
a = [2]
def changeA(c):
d = list(c)
d[0] = 10
return True
changeA(a)
print(a)
表现正常(即,如我所料)。
编辑:这个问题被认为是这个问题的重复。我不认为这是真的,因为这里也涉及到函数内部过程的局部性特征被违反了。