Python:为什么这两个分配会导致不同的结果?

时间:2019-03-02 22:55:45

标签: python python-3.x

我在下面尝试了两种不同的情况。我希望测试用例不同于测试集。但是,只有通过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:

1 个答案:

答案 0 :(得分:3)

testcase = testset中,testcase在字面上与testset相同。他们指的是同一列表。如果您对其中之一执行任何操作(如随机播放一个),则由于两个变量都指向同一列表,因此两个都将被随机播放。

然而,对于testcase2 = testset2[:][:]创建testset2的副本并将其放入testcase2中。他们现在指向不同的列表,因此对一个列表执行操作不会影响另一个列表。这就是assert testcase2 == testset2失败的原因。一个被洗牌。一个不是。