使用变量名称再次进行就地分配和分配之间的区别是什么?

时间:2017-12-13 14:55:12

标签: python c++

在Python中,在为变量赋值时,我们可以这样做:

variable = variable + 20

variable += 20

虽然我确实理解这两个操作在语义上是相同的,即它们实现了将variable的先前值增加20的相同目标,但我想知道是否存在微妙的运行时性能差异。两个,或任何其他可能认为比另一个更好的微小差异。 有没有这样的差异,还是它们完全一样? 如果有任何差异,对于其他语言(例如C ++)是否相同?

感谢。

1 个答案:

答案 0 :(得分:2)

也许这可以帮助您更好地理解:

import dis

def a():
  x = 0
  x += 20
  return x

def b():
  x = 0
  x = x + 20
  return x

print 'In place add'
dis.dis(a)

print 'Binary add'
dis.dis(b)

我们得到以下输出:

In place add
  4           0 LOAD_CONST               1 (0)
              3 STORE_FAST               0 (x)

  5           6 LOAD_FAST                0 (x)
              9 LOAD_CONST               2 (20)
             12 INPLACE_ADD         
             13 STORE_FAST               0 (x)

  6          16 LOAD_FAST                0 (x)
             19 RETURN_VALUE        

Binary add
  9           0 LOAD_CONST               1 (0)
              3 STORE_FAST               0 (x)

 10           6 LOAD_FAST                0 (x)
              9 LOAD_CONST               2 (20)
             12 BINARY_ADD          
             13 STORE_FAST               0 (x)

 11          16 LOAD_FAST                0 (x)
             19 RETURN_VALUE        

你可以使用计时器进行一千次左右的循环来比较性能,但主要区别在于一个。我想二进制加法应该更快。