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