第5章 经典参数错误

重点说明可变类型 与 不可变类型对象在程序引用过称中的区别:

不可变类型对象

def add(a, b):
    a += b
    print('函数内a=',a,'内存地址:',id(a))
    return a

a = 1
b = 2
c = add(a, b)
print(‘函数外a=’,a,‘内存地址:’,id(a))
print(‘c=’,c,‘a=’,a,‘b=’,b)

返回值:
函数内a= 3 内存地址: 140732939137360
函数外a= 1 内存地址: 140732939137296
c= 3 a= 1 b= 2
通过对比 a 的内存地址可以得知,函数内外的 a 不是同一个对象。

可变类型对象

def add(a, b):
    a += b
    print('函数内a=',a,'内存地址:',id(a))
    return a

a = [1, 2]
b = [3, 4]

c = add(a, b)
print(‘函数外a=’,a,‘内存地址:’,id(a))
print(‘c=’,c,‘a=’,a,‘b=’,b)

返回值:
函数内a= [1, 2, 3, 4] 内存地址: 2290824073800
函数外a= [1, 2, 3, 4] 内存地址: 2290824073800
c= [1, 2, 3, 4] a= [1, 2, 3, 4] b= [3, 4]
函数内部引用可变对象a时,改变的是同一个对象

结论:

不可变类型
以int类型为例:实际上 i += 1 并不是真的在原有的int对象上+1,而是重新创建一个value为6的int对象,i引用自这个新的对象。

可变类型
以list为例。list在append之后,还是指向同个内存地址,因为list是可变类型,可以在原处修改。

发布了31 篇原创文章 · 获赞 0 · 访问量 346

猜你喜欢

转载自blog.csdn.net/weixin_38027481/article/details/103817256
今日推荐