类的相等问题与deepcopy
test1_solution = copy.deepcopy(self.solution)before_change_successful_task_num = check.returnTotalNumSuccessfulTask(self.solution)
print('before_num',before_change_successful_task_num)
current_task1.setImageChance(optional_image_chance_list1)
current_task2.setImageChance(optional_image_chance_list2)
test2_solution = copy.deepcopy(self.solution)
l = 0
for k in range(len(self.solution)):
print(len(self.solution))
if(test1_solution.getImageChance() == test2_solution.getImageChance()):
l += 1
#else:
# if(test1_solution.getImageChance() != None):
# print('test1_sloution',test1_solution.id,test1_solution.getImageChance().id)
# print('test2_sloution',test2_solution.id,test2_solution.getImageChance().id)
# else:
# print('test1_sloution',test1_solution.id,test1_solution.getImageChance())
# print('test2_sloution',test2_solution.id,test2_solution.getImageChance())
print('l',l)
截取了代码了一段,self.solution是由current_task元素构成的长度为6000的列表,current_task1和current_task2是其中的两个元素,setImageChance这个函数改变了元素的某个属性,上述代码总共改变了两个元素的属性,改变前后均deepcopy了一份,按理来说后续打印出来的l应该是5998,但是运行发现结果为100多,求大佬指教 getImageChance运行完会得到一个类,这个类的相等是用默认的方法,没有自定义类相等 根据您提供的代码和注释,可以看到在循环中比较了test1_solution和test2_solution两个深拷贝后的列表中元素属性值是否相等。如果属性值相等,则将计数器l加一。
但是从代码中无法确定check.returnTotalNumSuccessfulTask(self.solution)函数的具体实现以及current_task、optional_image_chance_list等其他变量的定义和赋值情况,这些因素均可能对结果产生影响。因此需要更多上下文信息来判断问题的具体原因。
页:
[1]