2017-02-03 4 views
1

В питона, если у меня естьВ python функция возвращает неглубокую или глубокую копию?

x = y 

любое изменение х будет также изменять х, и я могу сделать

x = deepcopy(y) 

, если я хочу, чтобы избежать изменения у при работе на х

Скажем, вместо этого, что у меня есть:

myFunc(): 
    return y 

def main(): 
    x = myFunc() 

Это все еще так, изменение x изменит y, или поскольку это возврат из другой функции, это будет как глубокая копия?

+0

Можете ли вы быть более конкретными. В вашем случае неясно, откуда «y». Код, который вы отправили, не будет запущен, потому что «y» неизвестно – Vlad

+2

Функции не возвращают копии. Другими словами, это не так. –

ответ

8

В python все ссылки. Ничто не копируется, если вы явно не скопируете его.

В вашем примере x и y ссылка на тот же объект.

+1

Я думаю, что это действительно важный принцип для изучения в Python: назначение * никогда * не делает копию. Вы можете расширить это, чтобы возвращать функции. –

+0

Я знал, что о назначении в функции, я не был уверен в возврате, потому что я думаю, что в Java – user

1

Это будет мелкая копия, так как ничего не было явно скопировано.

def foo(list): 
    list[1] = 5 
    return list 

Например:

>>> listOne = [1, 2] 
>>> listTwo = [3, 4] 
>>> listTwo = listOne 
>>> foo(listTwo) 
[1, 5] 
>>> listOne 
[1, 5] 
Смежные вопросы