use*_*224 3 python copy function python-3.x
我有以下问题。我有一个函数,它将 2 个列表作为参数。为了不改变它们中的任何一个,我想使用该copy模块并创建deepcopy两者。
到目前为止,我只走到了这一步:
import copy
def f(a1, a2):
a1 = copy.deepcopy(a1)
a2 = copy.deepcopy(a2)
# Rest of function code below.
Run Code Online (Sandbox Code Playgroud)
我个人认为这段代码不好看。最好有这样的东西
import copy
def f(a1, a2):
newdeepcopy(locals())
# Rest of function code below. The same code as above.
Run Code Online (Sandbox Code Playgroud)
该函数newdeepcopy应将局部变量作为参数,并仅在 f 的范围内重新定义变量 a1 和 a2。这可能吗?
使用装饰器怎么样?
def deep_copy_params(to_call):
def f(*args, **kwargs):
return to_call(*(copy.deepcopy(x) for x in args),
**{k: copy.deepcopy(v) for k, v in kwargs.items()})
return f
Run Code Online (Sandbox Code Playgroud)
import copy
@deep_copy_params
def test(a, b, c=0):
print(a, b, c)
a[1] = 3
b[2] = 4
c[3] = 5
print(a, b, c)
aa = {1: 2}
bb = {2: 3}
cc = {3: 4}
test(aa, bb, cc)
print(aa, bb, cc)
Run Code Online (Sandbox Code Playgroud)
{1: 2} {2: 3} {3: 4}
{1: 3} {2: 4} {3: 5}
{1: 2} {2: 3} {3: 4}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |