如何创建独立的对象

时间:2019-04-10 12:47:31

标签: python oop

我创建的两个对象有问题。我有一个while循环来获取一些数据。我将此数据保存在一个对象中,并在每个循环中想查看我的数据是否已更改。如果为真,则将数据保存在日志中。问题是,当我刷新actVar时,我的prevVar也正在对此进行更改。这是我的代码:

我尝试使用copy()函数没有成功

uvcomsSup = UVCEComsCtrl_SupportData()
uvcomsAntSup = UVCEComsCtrl_SupportData()

while 1:
    try:        
        uvcomsSup = getUVComsSupport(OrigAddress, UVComsDestAddress)            
        print(uvcomsSup)
        print("________________________")
        print(uvcomsAntSup)               
        print(uvcomsSup is uvcomsAntSup)
        if (uvcomsSup != uvcomsAntSup):
            uvcomsAntSup = copy.copy(uvcomsSup)                      
            logFile.addSupportData(str(uvcomsSup))   
        sleep(1)
    except Exception as err:
        print("Error inesperado:", sys.exc_info()[0])
        print(err)

当我打印这两个对象时(我有一个 eq 方法和 str 方法),我看到了相同的值。我只是第一次输入if条件。

有帮助吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我无法运行您的代码,因此无法看到整个图片。

不过,我看到您返回的是ucomsSup中的a shallow copy,其中保留了对原始对象的引用,从而对其进行了修改。

尝试改用a deep copy

uvcomsSup = UVCEComsCtrl_SupportData()
uvcomsAntSup = UVCEComsCtrl_SupportData()

while 1:
    try:        
        uvcomsSup = getUVComsSupport(OrigAddress, UVComsDestAddress)            
        print(uvcomsSup)
        print("________________________")
        print(uvcomsAntSup)               
        print(uvcomsSup is uvcomsAntSup)
        if (uvcomsSup != uvcomsAntSup):
            uvcomsAntSup = copy.deepcopy(uvcomsSup) ## Create deep copy                 
            logFile.addSupportData(str(uvcomsSup))   
        sleep(1)
    except Exception as err:
        print("Error inesperado:", sys.exc_info()[0])
        print(err)

答案 1 :(得分:0)

Python文档说:

  

copy(x)返回x的浅表副本。

     

浅表副本会构造一个新副本   复合对象,然后(尽可能)插入引用   放入原始对象中。

尝试改用copy.deepcopy(x)。

uvcomsAntSup = copy.deepcopy(uvcomsSup) 
  

copy.deepcopy(x)返回x的深层副本。

     

深层副本会构造一个新的复合对象,然后递归地   将原始对象中的对象的副本插入其中。

详细了解此内容:https://docs.python.org/3.7/library/copy.html