Python-如何成功从一个对象复制数据并更改一个变量而又不更改另一个变量?

时间:2018-06-26 17:49:50

标签: python python-3.x

我想做这样的事情:

class test():
    def __init__(self):
        self.initfunc()

    def initfunc(self):
        self.a = 'test'

a = test()
b = test()
a = b

a.a = 'test3'
b.a = 'test4'

print(a.a, b.a)

输出为:

test4 test4

如何使输出为:

test3 test4

此外,泡菜也不是一种选择。这是我遇到的PyQt问题的简化版本,PyQt中的许多对象都不是可腌制的。

1 个答案:

答案 0 :(得分:0)

对我来说,要实现的目标还不是很清楚,但是之后

a = b
两个名称均指向同一对象。您可以这样验证:

a = test()
b = test()

print(id(a), id(b))
a = b    
print(id(a), id(b))

在其他语言中,您可以将其称为“按引用分配”。将test4分配给b.a之后,a.a当然是相同的值,因为它们是同一对象的相同属性。

注意:分配后原a将不再可用。

copy.copy()可能会满足您的需求:

b = test()

print(id(a), id(b))
a = copy(b)

print(id(a), id(b))

a.a = 'test3'
b.a = 'test4'

print(a.a, b.a)

但是鉴于您对pickle的评论,您很有可能必须实现__copy__()__deepcopy__()方法。