2017-02-03 9 views
1

、私はPythonでは、関数は浅いか深いコピーを返しますか? Pythonでは

x = y 

を持っている場合、xにいかなる変更も、Xを変更します、と私はX

での作業中にYを変更避けたい場合、私は

x = deepcopy(y) 

を行うことができます代わりに、私が持っていると言う:

myFunc(): 
    return y 

def main(): 
    x = myFunc() 

xを変更するとyが変更されるか、別の関数からの戻り値なので、deepcopyのようになりますか?

+0

あなたはより特異的であることができます。あなたの場合、「y」がどこから来るのかは明らかではありません。 'y'がわからないため、投稿したコードは実行されません。 – Vlad

+2

関数は何らかのコピーを返しません。言い換えれば、どちらでもない。 –

答えて

8

Pythonではすべてが参考になります。明示的にコピーしない限り、何もコピーされません。

例では、xyは同じオブジェクトを参照しています。

+1

これはPythonで学ぶことが本当に重要な原則だと思います。割り当て* never *はコピーを作成します。それを関数の戻り値にも拡張することができます。 –

+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] 
関連する問題