为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建独立对象

如何创建独立对象

慕哥6287543 2022-01-05 20:29:54
我创建的两个对象有问题。我有一个获取一些数据的循环。我将这些数据保存在一个对象中,并且在每个循环中我想查看我的数据是否已更改。如果是真的,我会将数据保存在日志中。问题是,当我刷新 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 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

我无法运行你的代码,所以我看不到全貌。


不过,我可以看到你正在返回浅拷贝的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)


查看完整回答
反对 回复 2022-01-05
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

Python 文档说:

copy(x) 返回 x 的浅拷贝。

浅拷贝构造一个新的复合对象,然后(在可能的范围内)向其中插入对原始对象中的对象的引用。

尝试使用 copy.deepcopy(x) 代替。

uvcomsAntSup = copy.deepcopy(uvcomsSup)

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

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

阅读更多相关信息:https : //docs.python.org/3.7/library/copy.html


查看完整回答
反对 回复 2022-01-05
  • 2 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号