【发布时间】:2011-06-23 02:50:58
【问题描述】:
我想使用一个函数来操作输入参数,但是在此过程中我必须复制输入参数。我不想返回修改后的对象(因为可能涉及也可能不涉及多处理)。如何将输入参数重新分配给复制的值?这是函数的表示:
from copy import deepcopy, copy
def myFunc(myObj,i):
myObj.x = 'start'
# I can't avoid this step:
modObj = deepcopy(myObj)
modObj.x = 'modified'
if i == 0:
myObj.x = modObj.x
elif i == 1:
myObj = modObj
elif i == 2:
myObj = copy(modObj)
elif i == 3:
myObj.__dict__ = modObj.__dict__
class MyClass(object):
def __init__(self):
self.x = "construct"
for i in range(4):
temp = MyClass()
myFunc(temp,i)
print i,temp.x
这是输出:
0 modified
1 start
2 start
3 modified
既然选项 #3 与我想要做的非常接近,有没有“官方”的方式来做呢?例如
myObj.shallowcopy(modObj)
这个浅拷贝的行为类似于拷贝中的浅拷贝。一种替代方法是将 MyClass 作为某个其他类的成员嵌入,并将该类传递给函数......但是如果我能做到这一点,为什么 python 不能通过复制成员数据来节省我的那一步?我读过this,但他们似乎没有为我找到答案。
【问题讨论】:
-
该问题的第一个答案也应该回答您的问题。
-
为什么需要复制对象?多处理的可能性如何阻止您返回修改后的副本?
-
@Devin,对于添加的
multiprocessing皱纹,我认为这是一个重复的 except。不过,我建议 amos 编辑标题以将其合并。 -
像 Karl 一样,我想知道为什么您需要对象的副本。我不知道这是不是他的想法,但我的问题是:你为什么不能只修改 original 对象?这四个选项是您的功能的所有基本功能,还是它们是“我尝试通过四种方式实现我的功能正在尝试执行的一个功能”意义上的选项?
标签: python reference pass-by-reference