我在下面尝试了两种不同的情况。我希望测试用例不同于测试集。但是,只有通过sencond方法,该断言才会返回警告。
In [95]: from random import shuffle
In [96]: testset = list(range(100))
In [97]: testcase = testset
In [98]: shuffle(testcase)
In [99]: assert testcase == testset
In [100]: testset2 = list(range(100))
In [101]: testcase2 = testset2[:]
In [102]: shuffle(testcase2)
In [103]: assert testcase2 == testset2
------------------------------------------------------
----------------
AssertionError Traceback (most
recent call last)
<ipython-input-103-268525dbf253> in <module>()
----> 1 assert testcase2 == testset2
AssertionError:
答案 0 :(得分:3)
在testcase = testset
中,testcase
在字面上与testset
相同。他们指的是同一列表。如果您对其中之一执行任何操作(如随机播放一个),则由于两个变量都指向同一列表,因此两个都将被随机播放。
然而,对于testcase2 = testset2[:]
,[:]
创建testset2
的副本并将其放入testcase2
中。他们现在指向不同的列表,因此对一个列表执行操作不会影响另一个列表。这就是assert testcase2 == testset2
失败的原因。一个被洗牌。一个不是。