我不确定这里是否适合我的问题,但我正在处理一些非常奇怪的事情。你知道吗
在我的脚本中,我有一个类data(),它只是一个容纳各种常量和数据类型的容器。其中一种数据类型是如下所示的字典:
testStatus = { 'checkpoint': None,
'tests_Executed': [],
'tests_Passed': [],
'tests_FailedFromRegression': [],
'tests_FailedFromRetest': [],
'tests_PassedFromRetest': [] }
我的意图是将此字典用作我所称的“上次测试状态”和“当前测试状态”的数据类型。在我的主类的构造函数中,我有这样的东西:
self.lastTestStatus = self.testStatus
self.currentTestStatus = self.testStatus
奇怪的部分发生在我的主类的run()函数中。这是类的主要worker函数。在获得一些先前保存的状态,并建立一个包含所有先前测试项的列表之后,自我电流测试状态即使我不碰它也会被写下来。代码如下所示:
self.getTestStatus()
#All good after this line.
#This is a function that uses self.lastTestStatus to save the previous status.
#After running this line, self.lastTestStatus["tests_FailedFromRegression"] will hold a list with some items. This is just script testing data.
previouslyTested = []
previouslyTested = self.lastTestStatus["tests_Passed"]
#All good after these two lines.
previouslyTested.extend(self.lastTestStatus["tests_FailedFromRegression"])
#At this point, self.currentTestStatus["tests_Passed"] gets the same value as self.lastTestStatus["tests_FailedFromRegression"] has.
previouslyTested.extend(self.lastTestStatus["tests_FailedFromRetest"])
previouslyTested.extend(self.lastTestStatus["tests_PassedFromRetest"])
你知道我到底做错了什么吗?如果我使用testStatus2作为我的当前状态,它与testStatus相同,那么一切都很好。你知道吗
我在Spyder 3.0.0dev中使用Python 2.7.10 32位
非常感谢!你知道吗
所以我们有个答案-
self.lastTestStatus
和self.currentTestStatus
是对同一对象的引用。当你改变一个,你改变另一个,因为他们实际上是同一个对象。相反,你应该这样做为了复制字典和他们持有的列表docs。你知道吗
相关问题 更多 >
编程相关推荐