2017-02-03 74 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] 
相关问题