python 按引用传递_重新链接python对象(即按引用传递)

更新:好的,现在我对这个问题有了更多的了解,我建议选择1和4的组合:创建公共update()和dictify()方法。这些可能是选项4周围的包装或者像myObj.dict.update(modObj.dict)这样的一些变化 - 两者都有些骇人听闻。

或者,它们可以是优雅,可读,自我记录的方法,分别接受和返回self的相应字典表示,其可能与self.dict重合,也可能不重合。我认为Python没有任何内置功能的原因是没有真正的通用方法来实现它,因为并非所有对象都有dict。这种行为必须有一个自定义的实现。

如果操作dict足以满足您的需求,那很好,但是如果您隐藏在后面可以更改的抽象背后的操作,如果您决定要实现slots或类似的东西,则可以省去一些麻烦。

(出于历史目的离开以下)

这让我感到困惑:“我不想返回修改后的对象(因为可能涉及或可能不涉及多处理)。”如果您的意思是multiprocessing模块,那么即使选项0和3也会失败,因为进程不共享内存。

>>> for i in range(4):

... temp = MyClass()

... p = Process(target=myFunc, args=(temp, i))

... p.start()

... p.join()

... print i,temp.x

...

0 construct

1 construct

2 construct

3 construct看到?如果要在进程之间传输数据,则必须使用multiprocessing的内置类型之一。

>>> from multiprocessing import Process, Queue

>>>

>>> def myFuncQ(myObj, i, return_queue):

... myObj.x = 'start'

... modObj = deepcopy(myObj)

... modObj.x = 'modified'

... return_queue.put(modObj)

...

>>> return_queue = Queue()

>>> for i in range(4):

... temp = MyClass()

... p = Process(target=myFuncQ, args=(temp, i, return_queue))

... p.start()

... p.join()

... temp = return_queue.get()

... print i,temp.x

...

0 modified

1 modified

2 modified

3 modified如果您没有使用multiprocessing,那么Queue将与任何其他可变容器一起用于此目的。这是最接近Python的“官方”方式通过引用传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值