Python:a,b=[1,2],a`和a=[1,2]之间的区别;b=a`?
在我的理解中,以上两段代码应该具有相同的效果。但是为什么当我让一个点指向另一个数组时,结果可能会不同呢?以下代码说明了区别:Python:a,b=[1,2],a`和a=[1,2]之间的区别;b=a`?,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,在我的理解中,以上两段代码应该具有相同的效果。但是为什么当我让一个点指向另一个数组时,结果可能会不同呢?以下代码说明了区别: #第1部分 a=[1,2] b=a a=a+[3]#a指向一个新数组。b仍应指向[1,2] 印刷品(a,b)[1,2,3][1,2]。我的预期结果。 #第二部分 a、 b=[1,2],a a=a+[3]#a指向一个新数组。b仍应指向[1,2] 印刷品(a,b)#[1,2,3][1,2,3]。为什么结果与上述不同? 我对第二部分的结果感到惊讶。有人能解释一下为什么结果不同
#第1部分
a=[1,2]
b=a
a=a+[3]#a指向一个新数组。b仍应指向[1,2]
印刷品(a,b)[1,2,3][1,2]。我的预期结果。
#第二部分
a、 b=[1,2],a
a=a+[3]#a指向一个新数组。b仍应指向[1,2]
印刷品(a,b)#[1,2,3][1,2,3]。为什么结果与上述不同?
我对第二部分的结果感到惊讶。有人能解释一下为什么结果不同吗?提前非常感谢
编辑:非常感谢大家!现在我明白问题了!非常感谢 好吧,
a
已经是《第一部分》中的[1,2,3]
,所以当你在《第二部分》中将其分配给b
时,当然b
将是[1,2,3]
。你需要在隔离的环境中运行测试。您的“第2部分”测试正在从“第1部分”获取a
值。行
a,b=[1,2],a
将[1,2]
分配给a
,并将a
的上一个值分配给b
这意味着
b
之前的值为a
,即[1,2,3]
您是否一次运行整个代码?
如果你这样做,这种困惑很容易解释
当您在第二部分中设置b=a时,它采用实际的a值,这是由于第一部分的原因[1,2,3]。您需要了解操作顺序 表达式
[1,2],a
正在构建一个包含两个元素的元组。第一个元素是列表[1,2]
,第二个元素是a
的现有值,该值在第1部分中设置为[1,2,3]
现在元组被赋值解包了,所以a=[1,2]
和b=[1,2,3]
然后修改a
,使其与b
一致
如果您在测试的两个部分中使用了不同的常数,那么整个过程会更加清晰
# a=[1,2,3] from part 1
a,b=[4,5],a
a=a+[6]
print(a,b) # [4, 5, 6] [1, 2, 3]
这是因为您在同一环境中同时运行part_1和part_2。 现在在这行
a,b=[1,2],a
列表[1,2]
被分配给a
,但是a
的部分值被分配给b
,即[1,2,3]
。由于这个原因,对于a
和b
,您将获得[1,2,3],[1,2,3]
现在,如果您尝试单独运行第2部分,您将遇到一个
namererror
,因为在第2部分中,a=[1,2]
和b=a
同时执行。这意味着当a
被分配给变量b
时,a
尚未分配给[1,2]
,a行a,b=[1,2],如果“第1部分”没有先运行,a
将不起作用,因为没有a
分配给b
。在分配给b
之前,您需要先完成分配给a
,因此只有“第1部分”才适用于此逻辑。一个人在尝试使用“a”时会出现一个错误,而此时该“a”仍然是未定义的,并且会立即意识到发生了什么。