如何创建独立对象

我创建的两个对象有问题。我有一个获取一些数据的循环。我将这些数据保存在一个对象中,并且在每个循环中我想查看我的数据是否已更改。如果是真的,我会将数据保存在日志中。问题是,当我刷新 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 条件。


有什么帮助吗?


慕哥6287543
浏览 217回答 2
2回答

墨色风雨

我无法运行你的代码,所以我看不到全貌。不过,我可以看到你正在返回浅拷贝的ucomsSup,它保留从而原来的对象修改它的引用。尝试改用深拷贝。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)

qq_笑_17

Python 文档说:copy(x) 返回 x 的浅拷贝。浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象中的对象的引用。尝试使用 copy.deepcopy(x) 代替。uvcomsAntSup = copy.deepcopy(uvcomsSup)copy.deepcopy(x) 返回 x 的深层副本。深层复制构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。阅读更多相关信息:https : //docs.python.org/3.7/library/copy.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python