python中赋值语句和增强赋值语句的区别

1.增强赋值语句中x只被评估一次,且评估顺序是从左往右进行的,即先评估x后评估1,最后执行操作
    1.评估x: 在当前符号表中找到x,根据其值(所引用对象的地址值)找到与之绑定的对象
    2.评估int型对象1
    3.执行操作
        1.如果可能,实际操作是现场执行的,即修改x所引用的对象,而不是创建新的对象

        2.反之,则会创建新对象,并覆盖该函数局部符号表中的变量的值(即变量num所指向的对象变化)

1.这一点和普通赋值语句中实现过程一致

注:

1.增强赋值语句即在一个语句中结合二进制操作和赋值语句e.g:num += num, num += 3

2.普通赋值语句e.g: num = num + num, num = num + 3

num = [3]
def f(num):
    print("------------", id(num))
    num += num #增强赋值语句
    print("------------", id(num))

print(id(num))
f(num)
print(id(num))


'''
输出:
    1768567071112
    ------------ 1768567071112
    ------------ 1768567071112
    1768567071112
'''


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

num = 3
def f(num):
    print("------------", id(num))
    num += num #增强赋值语句
    print("------------", id(num))

print(id(num))
f(num)
print(id(num))
'''
输出:
    1981396096
    ------------ 1981396096
    ------------ 1981396192
    1981396096
'''
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

num = [3]
def f(num):
    print("------------", id(num))
    num = num + num #普通赋值语句
    print("------------", id(num))
print(id(num))
f(num)
print(id(num))
'''
输出:
    1940624695944
    ------------ 1940624695944
    ------------ 1940624696008
    1940624695944
'''
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

num = 3
def f(num):
    print("------------", id(num))
    num = num + num #普通赋值语句
    print("------------", id(num))
print(id(num))
f(num)
print(id(num))
'''
输出:
    1981396096
    ------------ 1981396096
    ------------ 1981396192
    1981396096
'''
备注:

1.文本直接操作的是可变对象和不可变对象

2.另一篇讲解可变对象和不可变对象的博文 --- 文中操作的是可变对象中的元素

参考: http://blog.csdn.net/kc_1197977022/article/details/70209461

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值