我创建的两个对象有问题。我有一个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条件。
有帮助吗?
谢谢
答案 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的深层副本。
深层副本会构造一个新的复合对象,然后递归地 将原始对象中的对象的副本插入其中。