python:关于赋值语句的混淆:l = [a,b] = [0,1]?

时间:2016-03-05 02:42:15

标签: python

在python 3.4交互式提示符中:

    >>> l = [a,b] = [0,1]
    >>> a is l[0]
    True
    >>> b is l[1]
    True
    >>> l[0] = 2  
    >>> a
    0
    >>> l
    [2, 1]

我假设以下语句执行列表第一个元素的更改。

    l[0] = 2 

由于变量a引用同一个对象,为什么它的值仍为0?在这个赋值语句中内部会发生什么?

3 个答案:

答案 0 :(得分:3)

这是因为您实际上在abl创建了三个变量。只有最后一个是列表。逐行格式发生了什么:

a = 0
b = 1
l = [a, b] #which means l = [0, 1], not really the same referencing element a, b

然后,如果你检查

a is l[0]
b is l[1]

两者都返回true,因为它们的值相同,但,而不是引用

然后当你改变时:

l[0] = 2

l[0]中的值发生变化,不会影响a。最好是使用PyCharm之类的好调试工具进行检查。它会在监视窗口中显示并内联变量的所有当前值。

答案 1 :(得分:1)

al[0]是同一个对象的两个名称,但当您说l[0] = 2时,您只是重新定义l[0]a仍然指的是与之前相同的对象;只是l[0]发生了变化。 a指的是一个对象,而不是一个位置。

答案 2 :(得分:0)

我认为混淆是由于最初的任务:

l = [a,b] = [0,1]

这相当于:

t = [0, 1]
l = [a, b] = t

反过来相当于:

t = [0, 1]
a = t[0]
b = t[1]
l = t

反过来相当于:

l = [0, 1]
a = l[0]
b = l[1]

其余部分也是如此。