python嵌套函数对外部变量的可访问性

时间:2016-02-23 08:43:19

标签: python

我想知道为什么引用变量(dict,list)可以从嵌套函数访问而简单对象不可以。

@strongify

2 个答案:

答案 0 :(得分:1)

Integer是不可变的,这意味着当python执行

a=2 inside f()

它创建一个新的本地对象。虽然列表和字典是可变的,但它可以在适当的位置进行修改。

>>> a = 0
>>> id(a)
31367908
>>> ls = [1,2]
>>> id(ls)
50082760
>>> def f():
    a = 2
    print id(a)
    ls[0] = 5
    print id(ls)


>>> f()
31367884
50082760

答案 1 :(得分:0)

使用语句a = 2,您正在创建值为2的新本地变量。但是,当您修改b[0]c['c']时,您正在改变全局变量。如果你必须在函数中处理可变类型(与局部变量一起使用它们),你必须在变异之前初始化适当的变量:

def f():
  c = {}
  b = []
  c['c'] = 2
  b.append(1)

请参阅Variables and scope章节,详细描述了范围如何在python中工作,并获得有关可变和不可变类型的更多信息。