python中a%b |
您所在的位置:网站首页 › python计算a加b › python中a%b |
我一直以为a+=b和a=a+b是一样的,毕竟效果是一样的嘛。后来我发现并不是这么回事?我发现当变量是不可变对象时,a+=b和a=a+b是一样的,不过我注意到了前后两个a已经不是同一个对象了。而当变量是可变对象时,虽然a+=b和a=a+b的效果是一样的,但是a=a+b前后的两个a也不是同一个对象了,而a+=b前后两个a还是同一个对象。 # 不可变对象 # a+=b 前后的a不是同一个对象 >>> a=1 >>> b=2 >>> id(a) 140722530604704 >>> a+=b >>> id(a) 140722530604768 >>> print(a) 3 # a=a+b 前后的a也不是同一个对象 >>> a=1 >>> b=2 >>> id(a) 140722530604704 >>> a=a+b >>> id(a) 140722530604768 >>> print(a) 3 # 可变对象 # a+=b 前后的a是同一个对象 >>> a=[1,2] >>> b=[3,4] >>> id(a) 214391266944 >>> a+=b >>> id(a) 214391266944 >>> print(a) [1, 2, 3, 4] # a=a+b 前后的a不是同一个对象 >>> a=[1,2] >>> b=[3,4] >>> id(a) 2143494790272 >>> a=a+b >>> id(a) 2143494790592 >>> print(a) [1, 2, 3, 4] 这是怎么回事呢?看了一下各位大佬写的文章,总算是弄明白了一些。 +操作调用的是__add__方法 __add__方法会返回一个新的对象,原对象不修改。 +=操作调用了__iadd__方法 __iadd__方法直接在原对象上进行更新,该方法的返回值为None。 没有该方法时,再尝试调用__add__方法。 不可变对象只有__add__方法,没有__iadd__ 可变对象有__add__方法,也有__iadd__ 结论 当变量是不可变对象时,a+=b和a=a+b调用的都是__add__方法,返回的是一个新对象 当变量是可变对象时,a+=b调用的是__iadd__方法,直接在原对象上进行更新;a=a+b调用的是__add__方法,返回一个新对象 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |