【发布时间】:2021-02-02 10:19:57
【问题描述】:
我认为我对 Python 如何传递对象有很好的了解 (this article seemed enlightening)。
然后我尝试了一些简单的方法,只是将函数分配给变量。
class Thingy:
def __init__(self):
self.foo = {"egg": [1], "spam": [2]}
def calc(self):
self.foo["egg"][0] = 3
self.foo["spam"][0] = 4
def egg(self):
return self.foo["egg"][0]
def spam(self):
return self.foo["spam"]
thingy = Thingy()
x = thingy.egg()
y = thingy.spam()
print(x) # prints 1
print(y[0]) # prints 2
print(thingy.foo)
thingy.calc()
print(x) # prints 1 (???)
print(y[0]) # prints 4
print(thingy.foo)
我不完全确定发生了什么,尤其是字典中的值已更新。我的猜测是当变量x被赋值时,它实际上是指一个返回值已经被评估为“1”的函数。
我的理解正确吗?我希望能清楚地解释为什么 Python 决定区别对待 .egg() 和 .spam()。
【问题讨论】:
-
它并没有区别对待它们;
egg返回一个不可变值(整数),spam返回一个可变值(一个列表)。 -
“然后我尝试了一些简单的方法,只是将函数分配给变量。” - 您没有将函数分配给变量。您正在调用方法并将返回的对象分配给变量。
标签: python variable-assignment