Python探究--对比 +与+=

Python探究–对比 +与+=

1. 简介

Python中经常用到运算符++=探究二者区别:

探究a = a + ba += b在过程上有何不同(执行结果是相同的)。

+对应方法add__add__,前者属于operator模块(Python底层,一些基本数据类型的运算符),后者属于类的魔术方法,用于扩展类的功能。

    def __add__(self, *args, **kwargs): # real signature unknown
        """ Return self+value. """
        pass
  • a+b的值作为返回值,返回给a

同理+=对应的方法为iadd__iadd__

def __iadd__(self, *args, **kwargs): # real signature unknown
    """ Implement self+=value. """
    pass
  • 计算a+b的值,a指向的内存空间是否变化依据a是否可变而定,可变则不变化,不可变则变化。

2. 分析

由上知对于运算符+,执行后返回结果,需要对象接收。举个例子:a = a + b,所以不管数据类型是否可变,两个aid必然不同。

def add_test():
    # a = a+b
    obj = "a"
    mut = ["a"]
    print("immutable obj id before add: ", id(obj))
    print("mutable obj id before add: ", id(mut))

    obj = obj + "a"
    mut = mut + ["a"]
    print("immutable obj id after add: ", id(obj))
    print("mutable obj id after add: ", id(mut))
    
add_test()    
    
immutable obj id before add:  140395280603376
mutable obj id before add:  140395281045512
immutable obj id after add:  140395280140808
mutable obj id after add:  140395280179144
  • 如上所示,可变类型与不可变类型在执行a = a + ba的内存空间均发生变化。

那么对于表达式a += b

def iadd_test():
    # a += b
    obj = "a"
    mut = ["a"]
    print("immutable obj id before iadd: ", id(obj))
    print("mutable obj id before iadd: ", id(mut))

    obj += "a"
    mut +=  ["a"]
    print("immutable obj id after iadd: ", id(obj))
    print("mutable obj id after iadd: ", id(mut))
    
iadd_test()

immutable obj id before iadd:  140395280603376
mutable obj id before iadd:  140395280179144
immutable obj id after iadd:  140395280140808
mutable obj id after iadd:  140395280179144
  • 对于可变类型,a指向的内存空间不变
  • 对于不可变类型,a指向的内存空间变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值