在Python中,函数返回的是浅拷贝还是深拷贝?

11
在Python中,如果我有一个变量:

x = y

任何对 x 的修改也会修改 y,而且我可以这样做。
x = deepcopy(y)

如果我想在处理x时避免修改y

举个例子,我有:

myFunc():
    return y

def main():
    x = myFunc()

如果修改x,是否仍然会修改y,或者由于它是从另一个函数返回的,它会像深拷贝一样?


你能具体说明一下吗?在你的情况下,不清楚'y'是从哪里来的。你发布的代码无法运行,因为'y'未知。 - Vlad
2
函数不会返回任何副本。换句话说,它既不是这样也不是那样。 - juanpa.arrivillaga
2个回答

20

在Python中,一切皆为引用。除非您明确复制它,否则不会复制任何内容。

在您的示例中,xy引用同一对象。


6
在Python中,我认为这是一个非常重要的原则:赋值操作永远不会复制对象。你也可以将此原则扩展到函数返回值。 - Mark Ransom
我知道在函数中的赋值,但我不确定返回值,因为我认为它在Java中是不同的。 - user
为什么将ravel()后的ndarray列表扩展到另一个列表中时,不会创建原始ndarray的浅拷贝? - John Glen

7
这将是一份浅拷贝,因为没有明确地进行复制。
def foo(list):
    list[1] = 5
    return list

例如:

>>> listOne = [1, 2]
>>> listTwo = [3, 4]
>>> listTwo = listOne
>>> foo(listTwo)
[1, 5]
>>> listOne
[1, 5]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接