Python:为什么这两个赋值会导致不同的结果?
我试过下面两个不同的案例。我希望测试用例与测试集不同。但是,只有通过sencond方法,断言才会返回警告Python:为什么这两个赋值会导致不同的结果?,python,python-3.x,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(ra
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:
[95]中的:来自随机导入洗牌
在[96]中:testset=list(范围(100))
在[97]中:testcase=testset
在[98]中:洗牌(testcase)
在[99]中:断言testcase==testset
In[100]:testset2=列表(范围(100))
在[101]中:testcase2=testset2[:]
在[102]中:洗牌(testcase2)
在[103]中:断言testcase2==testset2
------------------------------------------------------
----------------
断言错误回溯(most)
最近通话(最后一次)
在()
---->1断言testcase2==testset2
断言者错误:
对于testcase=testset
,testcase
与testset
的列表基本相同。他们指的是同一份名单。如果您对其中一个执行任何操作(如shuffle one),因为两个变量都指向同一个列表,所以两个变量都将被shuffle
但是,使用testcase2=testset2[:]
创建testset2
的副本并将其放入testcase2
。他们现在指向不同的列表,因此对其中一个做一些事情不会影响另一个。这就是为什么assert testcase2==testset2
失败的原因。一个被洗牌了。有一个没有。请务必阅读,我想这是类似于“按引用传递”和“按值传递”的吗?@RaymondQin此处没有传递任何内容,因此我认为这与此无关。chepner发布的链接可能会消除任何混乱。