【发布时间】:2017-08-14 00:02:14
【问题描述】:
我正在尝试将 pass by object None 值重新分配给实际值。有人可以解释为什么这不起作用吗?我认为由于None 是NoneType,它将通过引用传入,当我使用传入的变量时,我会更改原始的None 对象。这是不正确的吗?我在下面提供了一个 sn-p 来演示我的案例:
class MyClass:
def __init__(self):
self.value = None
def assign(self, object):
object = OtherClass()
example = MyClass()
example.assign(example.value)
结果是example.value 仍然是None。这是为什么?我读过一些SO posts,但没有一个能清楚地解释这一点。
编辑:不是重复的,因为我想知道为什么当我认为它应该通过引用传递时它表现得像传递值。最后,我得出结论,NoneType 对象是不可变的,因此总是按值传递。我需要使用list 类型对象或可变的东西。
再次编辑:我的示例代码只是一般情况。我试图实现一个BST,我的初始根节点是None,当我将根节点分配为Node对象时,它仍然是NoneType,这让我感到困惑并且是导致这个问题。
最后编辑:下面的答案提供了一个非常好的 tl;dr 对象传递摘要。我无法仅通过搜索/阅读论坛来理解。
【问题讨论】:
-
“我想既然 None 是一个 NoneType ,它会通过引用传入” - 你能解释一下你为什么这么想吗?您认为“None is a NoneType”和“因此,它将通过引用传递”之间的联系是什么? Python 中没有任何内容是通过引用传递的。
-
哦,在此之前我的理解是对象(通常是可变的)在 Python 中是通过引用传递的。我想既然 None 是一个 NoneType object,它必须通过引用传递。我的逻辑让我失望了:p
标签: python pass-by-reference pass-by-value