【发布时间】:2015-10-05 07:41:13
【问题描述】:
在下面的例子中,一个类“自动”通过“引用”传递,一个变量“通过值”传递:
class Q:
def __init__(self, q):
self.q = q
p = 42
q = Q(42)
def p_worker(p):
p += 1
return p
def q_worker(q):
q.q += 1
return q
print p is p_worker(p)
print q is q_worker(q)
输出是:
False
True
为什么会有这样的差异?
【问题讨论】:
-
一般情况下不可变对象通过值传递,可变对象通过引用传递。
-
@TigerhawkT3,对象的不变性是在编译时预先确定或评估的吗? (example on Wikipedia 也返回 True...)
-
@TigerhawkT3:这是不正确的。所有对象都以相同的语义传递。只是对于不可变对象,你不能“利用”通过引用传递,因为你不能做任何事情来改变你引用的值。
-
"How do I pass a variable by reference" 的所有答案也适用于此处,因此我投票决定将其作为重复项关闭。
-
好的,传递引用在可变对象上很明显,但在不可变对象上不明显。
标签: python pass-by-reference pass-by-value