在python中,函数是返回浅或深的副本吗?

时间:2017-02-03 20:18:33

标签: python reference deep-copy shallow-copy

在python中,如果我有

x = y

对x的任何修改也会修改y,我可以做

x = deepcopy(y)

如果我想避免在处理x

时修改y

相反,我说:

myFunc():
    return y

def main():
    x = myFunc()

是否仍然需要修改x来修改y,或者因为它是从另一个函数返回它会像深度复制一样?

2 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:3)

这将是一个浅层副本,因为没有明确复制过任何内容。

def foo(list):
    list[1] = 5
    return list

例如:

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