我想做这样的事情:
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中的许多对象都不是可腌制的。
答案 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__()
方法。