帮助我理解列表分配之间的区别。
我发现像这样的作业
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
两种分配方法有何不同?乍一看,它们看起来一样,做同样的事情。
答案 0 :(得分:1)
但是这两种分配方法都做了相同的事情,交换。
不完全......前一个例子没有交换。相反,它需要b
的第一个元素并将其放在a
的第一个元素中。然后它采用a
的第一个元素(以前是b
中的第一个元素)并将其放回b中 - 将a[0]
和b[0]
保留为相同值。
当它全部在同一条线上时,python实际上做了一些有点神奇的事情。它有效地创建了一个新的元组(b[0], a[0])
,然后使用该元组将内容分配回b
和a
。换句话说,它的行为与下列行为有效:
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
。然后获取这些值并分配给a
和b
。这导致适当的交换。