Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为什么这两个赋值会导致不同的结果?_Python_Python 3.x - Fatal编程技术网

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

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

我试过下面两个不同的案例。我希望测试用例与测试集不同。但是,只有通过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:
[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发布的链接可能会消除任何混乱。