Python 进阶 —— x = x+1 vs x += 1

来源:互联网 发布:淘宝黑号了 编辑:程序博客网 时间:2024/06/02 07:28
  • (1)x += 1

    in-place(就地)修改 x 自身的值,

  • (2)x = x + 1

    会隐式地创建一个新的对象,表示 x 与 1的和,同时用同样的 name 指向它,所以它的含义和y = x+1相同,只不过这里将y取名为x罢了;

当我们用多个变量名指向同一对象实体时,可能对比会更加明显:

>> y = x = []>> x += [5]>> x[5]>> y [5]>> x = x + [5]>> x[5, 5]>> y[5]

以下是关于 ++=运算符重载(magic method)的说明

  • +:调用 __add__,不修改它的两个操作数
  • +=:调用__iadd__,会修改它自身的值

注:表达式本身是没有返回值的,如x = 1,甚至不会返回 None,y = x = 1含义不是y = (x = 1),而是 yx 指向相同的1所在的内存对象。

如此我们也可理解 Python 下简洁的 swap:

x, y = y, x

是将 x 指向 原始的 y,y 指向 原始的 x,也即可简单理解为同时发生,而不是:

x = yy = x            # 走的就是C/C++ swap 的老路了            # 需要借助中间变量

references

[1] Python Difference between x = x+1 and x += 1

0 0
原创粉丝点击