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的问题(请检查上面的链接),并确保它是安全的。