python nested function's accessibility to outer variable
本问题已经有最佳答案,请猛点这里访问。
我想知道为什么引用变量(dict,list)可以从嵌套函数访问,而简单对象不能访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | In [1]: a = 1 In [2]: b = [1] In [3]: c = {"c" : 1} In [4]: In [4]: def f(): ...: a = 2 ...: b[0] = 2 ...: c["c"] = 2 ...: In [5]: f() In [6]: In [6]: print a 1 In [7]: print b [2] In [8]: print c {'c': 2} |
整数是不可变的,这意味着当python执行
1 | a=2 inside f() |
它创建一个新的本地对象。虽然列表和字典是可变的,所以可以就地修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> 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 2 3 4 5 | def f(): c = {} b = [] c['c'] = 2 b.append(1) |
请参阅变量和范围一章,其中详细描述了范围如何在Python中工作,并获得有关可变和不可变类型的更多信息。