【发布时间】:2018-05-31 21:39:22
【问题描述】:
我正在编写代码,变量开始表现得很奇怪,并被分配给我认为它们不应该分配的东西。因此,我决定将情况降低到最小的复杂性以解决我的疑问,这就是发生的事情:
以下代码:
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)
表现正常(即,如我所料)。
编辑:这个问题被认为与this one 重复。我不认为这是真的,因为这里违反了函数内部过程的局部性特征也很重要。
【问题讨论】:
-
d = c不会创建新列表。见nedbatchelder.com/text/names.html -
d = c只是说“名称c引用的对象现在被名称d引用”。所以d和c指的是同一个对象。 -
@juanpa.arrivillaga 好的,我会读到的。提前致谢。但我仍然不明白为什么它会干扰函数之外的内容。
标签: python python-3.x list variables