2012-06-21 3 views
3

У меня возникли проблемы с пониманием нечетного поведения в функциях python, если я перехожу в список. я сделал следующие функции:Ссылка на список Python в функции.

def func(x): 
    y = [4, 5, 6] 
    x = y 

def funcsecond(x): 
    y = [4, 5, 6] 
    x[1] = y[1] 

x = [1, 2, 3] 

Когда я называю FUNC (х), а затем распечатать х, он печатает [1, 2, 3], так как х было раньше, он не приписывать список y до x. Однако, если я вызываю funcsecond (x), он присваивает 5 второй позиции x. Почему это так? Когда я назначаю весь список, он ничего не делает, но когда я назначаю только один элемент, он меняет список, изначально называемый им. Большое спасибо, и я надеюсь, что вы поймете, что я намерен сказать, мне нелегко выразить себя на английском.

ответ

4

Это происходит, когда beacuse x указывает на объект, который является изменяемым.

def func(x): # here x is a local variable which refers to the object[1,2,3] 
    y = [4, 5, 6] 
    x = y #now the local variable x refers to the object [4,5,6] 

def funcsecond(x): # here x is a local variable which refers to the object[1,2,3] 
    y = [4, 5, 6] 
    x[1] = y[1] # it means [1,2,3][1]=5 , means you changed the object x was pointing to 

x = [1, 2, 3] 
+0

Почему X внезапно становится локальным variable.It все равно должна быть ссылкой даже после назначения rit? –

+2

'x' - это локальная переменная внутри функций, потому что она используется в аргументах (внутри заголовка функции). –

+0

Это ссылка. Бит в 'func' эта ссылка переназначается, чтобы указать на новый объект. –

9

Бывший на повторную привязку имя, последний мутируетобъекта. Изменения в имени существуют только в локальной области, тогда как мутированный объект остается мутированным после выхода из области.

+1

Может потребоваться немного больше объяснений, чем это, - опять же, это, без сомнения, обман. –

+0

как python определяет, когда переписывать и когда мутировать? –

+2

Он переплетается, когда вы назначаете голое имя (например, 'foo ='). Каждая другая операция присваивания (обычно) - мутация. –

Смежные вопросы