不同数据类型的范围

时间:2018-03-05 09:14:26

标签: python types scope

我正在尝试编写一个计算BST中不同元素数量的方法。这是我的代码:

def numDistinct(root):

    distinct = 0
    seen = {}

    def private_helper(root):

        if not root: return
        if root.val not in seen:
            seen[root.val] = root.val
            distinct += 1
        private_helper(root.left)
        private_helper(root.right)

    private_helper(root)
    return distinct

然而,它给了我错误UnboundLocalError: local variable 'distinct' referenced before assignment。我理解错误,但我觉得奇怪的是seendistinct具有相同的范围,并没有抛出相同的错误(即使它在private_helper()之前被引用{ {1}}是)。为了测试这一点,我将distinct更改为dict并进行设置,以便我仍然可以将其用作计数器:distinct。错误停止,我的方法开始完美运行。这里发生了什么?不同数据类型之间的范围是否存在差异?

1 个答案:

答案 0 :(得分:0)

差异是因为可变性。字典是一个可变对象。查看在函数范围内调用distinct时,它首先尝试访问distinct所持有的对象,并尝试将distinct重新绑定到另一个对象。

distinct += 1
or
distinct = distinct + 1

是一样的。但是在字典的情况下,你会反弹字典所拥有的名字。你改变了一个已存在的对象。