我想知道为什么引用变量(dict,list)可以从嵌套函数访问而简单对象不可以。
@strongify
答案 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中工作,并获得有关可变和不可变类型的更多信息。