我从 argparse 得到了“args”:
args = parser.parse_args()
我想将它传递给两个不同的函数,每个函数稍作修改。这就是为什么我想深度复制参数,修改副本并将它们传递给每个函数。
但是,copy.deepcopy 就是不起作用。它给了我:
类型错误:无法深度复制此模式对象
那么正确的做法是什么?谢谢
我自己刚刚找到了一种方法:
args_copy = Namespace(**vars(args))
不是真正的深复制。但至少比以下“更深”:
args_copy = args
import copy
args = parser.parse_args()
args_copy = copy.deepcopy(args)
使用 Python 2.7.15 进行测试
这可能是您使用深度复制的解决方案
import argparse
import copy
a = argparse.Namespace(x=[1])
b = argparse.Namespace(**vars(a))
c = argparse.Namespace(**{k: copy.deepcopy(v) for k, v in vars(a).items()})
# b is wrong
b.x.append(2)
print(a.x)
# c makes deepcopy
a.x.append(3)
print(c.x) # should only print out [1]