在Python中,如何从argparse深度复制命名空间obj“args”

问题描述 投票:0回答:3

我从 argparse 得到了“args”:

args = parser.parse_args()

我想将它传递给两个不同的函数,每个函数稍作修改。这就是为什么我想深度复制参数,修改副本并将它们传递给每个函数。

但是,copy.deepcopy 就是不起作用。它给了我:

类型错误:无法深度复制此模式对象

那么正确的做法是什么?谢谢

python copy argparse
3个回答
10
投票

我自己刚刚找到了一种方法:

args_copy = Namespace(**vars(args))

不是真正的深复制。但至少比以下“更深”:

args_copy = args

5
投票
import copy
args = parser.parse_args()
args_copy = copy.deepcopy(args)

使用 Python 2.7.15 进行测试


0
投票

这可能是您使用深度复制的解决方案

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]

https://ideone.com/HCHaAL

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.