列表分配之间的差异

时间:2016-01-26 08:18:33

标签: python

帮助我理解列表分配之间的区别。

我发现像这样的作业

a[0] = b[0]
b[0] = a[0]

不同
a[0], b[0] = b[0], a[0]

两种情况下a和b的值都不同,但这两种分配方法都是相同的,交换。

您可以运行我的示例代码来查看

    a = [0,1,2]
    b = [3,4,5]
    print "Value of a and b before swaping :"
    print "value of a :" , a
    print "value of b :" , b
    print "\nswap in two line"
    a[0] = b[0]
    b[0] = a[0]
    print "value of a :" , a
    print "value of b :" , b
    print "\nswap in one line"
    # Reinitilizing value of a and b before performing swaping
    a = [0,1,2]
    b = [3,4,5]
    a[0], b[0] = b[0], a[0]
    print "value of a :" , a
    print "value of b :" , b

两种分配方法有何不同?乍一看,它们看起来一样,做同样的事情。

2 个答案:

答案 0 :(得分:1)

  

但是这两种分配方法都做了相同的事情,交换。

不完全......前一个例子没有交换。相反,它需要b的第一个元素并将其放在a的第一个元素中。然后它采用a的第一个元素(以前是b中的第一个元素)并将其放回b中 - 将a[0]b[0]保留为相同值。

当它全部在同一条线上时,python实际上做了一些有点神奇的事情。它有效地创建了一个新的元组(b[0], a[0]),然后使用该元组将内容分配回ba。换句话说,它的行为与下列行为有效:

temp = (b[0], a[0])
a[0] = temp[0]
b[0] = temp[1]

注意这与你的第一个案例在逻辑上有什么不同。

答案 1 :(得分:0)

不同之处在于分配的顺序。但它与列表无关。

代码

 a = b
 b = a

首先将b分配给a,然后将a分配给b,导致两者都具有b之前的值。

另一方面

a, b = b, a

首先评估b, a。然后获取这些值并分配给ab。这导致适当的交换。