a = b编辑a而不编辑b

时间:2014-08-24 21:08:58

标签: python class variables object

如果我有一个类obj,并且我创建了该类的实例,那么吧

bar = obj(bar)

然后print foo输出foo

设置foo = bar然后设置foo.change(foo)以便print foo == 'foo'

最后我做print foo, bar并希望看到foobar,但我明白了 foofoo。我怎样才能实现我想要的目标?

我已经尝试过做foo = copy.copy(bar)但是如果我换了一个就会改变它们。 我甚至试图设置foo = obj(bar.attribute)但仍然没有。

顺便说一下,我创造的真正的课程我只是这样做,因为我不想让事情更复杂

1 个答案:

答案 0 :(得分:1)

您需要使用copy.deepcopy()制作副本; copy.copy()仅生成副本:

import copy

foo = copy.deepcopy(bar)

浅拷贝只是重新创建实例但共享所有属性;如果这些属性是可变的,foobar都会看到变化;只有当你对bar上的属性进行反弹时foo才会看到相同的变化。

另一方面,

copy.deepcopy()递归地创建任何可变的新副本,从而产生一个全新的结构。