在蟒蛇,如果我有在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
函数不返回任何类型的副本。换句话说,它既不是。 –