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”仍然是未定义的,并且会立即意识到发生了什么。