如何阻止Python函数修改其输入?

How do I stop a Python function from modifying its inputs?

本问题已经有最佳答案,请猛点这里访问。

我刚才已经问过这个问题,但是修复程序不适用于x=[],我猜这是因为它是一个嵌套列表,我将使用这个列表。

1
2
3
4
5
6
7
8
9
def myfunc(w):
 y = w[:]
 y[0].append('What do I need to do to get this to work here?')
 y[0].append('When I search for the manual, I get pointed to python.org, but I can\'t find the answer there.')
 return y

x = [[]]
z = myfunc(x)
print(x)


以下是解决问题的方法:

1
2
3
4
5
6
7
8
9
def myfunc(w):
    y = [el[:] for el in w]
    y[0].append('What do I need to do to get this to work here?')
    y[0].append('When I search for the manual, I get pointed to python.org, but I can\'t find the answer there.')
    return y

x = [[]]
z = myfunc(x)
print(x)

关于[:]的问题是它是一个肤浅的副本。您也可以从复制模块导入deepcopy以获得正确的结果。


使用复制模块,并使用deep copy功能创建输入的深度复制。修改副本而不是原始输入。

1
2
3
4
5
6
7
8
9
10
import copy

def myfunc(w):
    y = copy.deepcopy(w)
    y[0].append('What do I need to do to get this to work here?')
    y[0].append('When I search for the manual, I get pointed to python.org, but I can\'t find the answer there.')
    return y
x = [[]]
z = myfunc(x)
print(x)

在使用此方法之前,请阅读有关deepcopy的问题(请检查上面的链接),并确保它是安全的。