首页 > 解决方案 > Python——如何成功地从一个对象复制数据并更改一个变量而不更改另一个变量?

问题描述

我想做这样的事情:

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 中的许多对象都不能腌制。

标签: pythonpython-3.x

解决方案


我并不完全清楚你想要实现什么,但之后

a = b

两个名称都指向同一个对象。您可以像这样验证这一点:

a = test()
b = test()

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

在其他语言中,您可能将其称为“通过引用分配”。分配test4给之后b.aa.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__()or__deepcopy__()方法。


推荐阅读