【问题标题】:In python, is a function return a shallow or deep copy?在python中,函数是返回浅拷贝还是深拷贝?
【发布时间】:2017-06-21 07:19:26
【问题描述】:

在python中,如果我有

x = y

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

x = deepcopy(y)

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

说,我有:

myFunc():
    return y

def main():
    x = myFunc()

还是修改x会修改y,还是因为它是另一个函数的返回,所以就像一个deepcopy?

【问题讨论】:

  • 你能说得更具体一点吗?在您的情况下,不清楚 'y' 来自哪里。您发布的代码将无法运行,因为 'y' 未知
  • 函数不返回任何类型的副本。换句话说,两者都不是。

标签: python reference deep-copy shallow-copy


【解决方案1】:

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

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

【讨论】:

  • 我认为这是在 Python 中学习的一个非常重要的原则:赋值 从不 复制。您也可以将其扩展到函数返回。
  • 我知道关于函数中的赋值,我不确定返回,因为我认为它在 Java 中有所不同
【解决方案2】:

这将是一个浅拷贝,因为没有明确复制任何内容。

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

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2012-01-30
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多