在蟒蛇,如果我有在python中,是一個函數返回一個淺或深的副本?
x = y
任何修改X也將修改X,而我可以做
x = deepcopy(y)
,如果我想避免修改Ÿ而努力X
相反地說,我有:
myFunc():
return y
def main():
x = myFunc()
是否仍然是這種情況修改x會修改y,或者因爲它是來自另一個函數的返回,它將會像深度拷貝一樣?
在蟒蛇,如果我有在python中,是一個函數返回一個淺或深的副本?
x = y
任何修改X也將修改X,而我可以做
x = deepcopy(y)
,如果我想避免修改Ÿ而努力X
相反地說,我有:
myFunc():
return y
def main():
x = myFunc()
是否仍然是這種情況修改x會修改y,或者因爲它是來自另一個函數的返回,它將會像深度拷貝一樣?
在python中,一切都是參考。除非您明確複製它,否則不會複製。
在你的例子中,x
和y
引用同一個對象。
我認爲這是一個非常重要的學習Python原則:賦值*從不*複製。您也可以將它擴展到函數返回。 –
我知道關於函數中的賦值,我不確定返回,因爲我認爲它在Java中是不同的 – user
這將是一個淺拷貝,因爲沒有任何東西被明確複製。
def foo(list):
list[1] = 5
return list
例如:
>>> listOne = [1, 2]
>>> listTwo = [3, 4]
>>> listTwo = listOne
>>> foo(listTwo)
[1, 5]
>>> listOne
[1, 5]
你能更具體。在你的情況下,不清楚'y'來自哪裏。您發佈的代碼將無法運行,因爲'y'未知 – Vlad
函數不返回任何類型的副本。換句話說,它既不是。 –