2014-10-02 3 views
0

Я пытаюсь понять Closures в Python и наткнулся на следующий код:Затворы в Python Query

def return_func_that_prints_list(z): 
    def f(): 
     print z 
    return f 

z = [1,2] 
g = return_func_that_prints_list(z) 
g() 

# Output is [1,2,3] 
z.append(3) 
g() 

Я не понимаю, выход здесь:

# Why is the Output still [1,2,3]? 
z = [1] 
g() 

Я DON» т понять, выход здесь:

# Why is the Output still [1,2,3]? 
z.append(4) 
g() 

Благодарности

ответ

0

Эта линия:

z = [1] 

не выполняет повторную привязкуz так, чтобы он больше не указывает на объект, содержащийся внутри крышки. Но у закрытия все еще есть своя копия старого объекта, поэтому его поведение не меняется.