如何理解Python中的引用(二)

不可变数据类型:

# 不可变:
# 无论是b = b + b 还是b += b 都是属于重新赋值
def fun(b):
    b = b + b
    print(f"结束之后{id(b)}")


def fun1(b):
    b += b
    print(f"+=结束之后{id(b)}")


b = "a"
print(f"调用之前{id(b)}")
# fun(b)    # 2400614325304     2400643655360
fun1(b)     # 2907432590392     2907433477824

可变数据类型

# 可变:
# b = b + b 是重新赋值
# b += b 对原来的数据进行修改(b.extend(b))
def fun(b):
    b = b + b
    print(f"结束之后{id(b)}")
    print(f"结束后的b{b}")


def fun1(b):
    b += b
    print(f"+=结束之后{id(b)}")
    print(f"结束后的b{b}")


b = [1, 2]
print(b)
print(f"调用之前{id(b)}")
# fun(b)    # 2665267946120   2665267946184
fun1(b)     # 2424715960968   2424715960968

结论:

调用一个有参数的函数的时候, 传递的不是数值, 而是引用。
这主要是由于“=”操作符会新建一个新的变量保存赋值结果,然后再把引用名指向“=”左边,即修改了原来的b引用,使b成为指向新赋值变量的引用。而+=不会,直接修改了原来b引用的内容,事实上+=和=在python内部使用了不同的实现函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值