2017-02-03 62 views
1

在蟒蛇,如果我有在python中,是一個函數返回一個淺或深的副本?

x = y 

任何修改X也將修改X,而我可以做

x = deepcopy(y) 

,如果我想避免修改Ÿ而努力X

相反地​​說,我有:

myFunc(): 
    return y 

def main(): 
    x = myFunc() 

是否仍然是這種情況修改x會修改y,或者因爲它是來自另一個函數的返回,它將會像深度拷貝一樣?

+0

你能更具體。在你的情況下,不清楚'y'來自哪裏。您發佈的代碼將無法運行,因爲'y'未知 – Vlad

+2

函數不返回任何類型的副本。換句話說,它既不是。 –

回答

8

在python中,一切都是參考。除非您明確複製它,否則不會複製。

在你的例子中,xy引用同一個對象。

+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] 
相關問題