【python】 可变对象,赋值 的变化比较
# 值传递,引用传递 l11=[1,2,3] l21=l11 l11.append(4) print(l11) print('-------') print(l21) ''' 对象自身发生改变,并不创建新的对象,两个对象同时指向原来的列表 [1, 2, 3, 4] ------- [1, 2, 3, 4] ''' print('2222222222222222222222222') l11=[1,2,3] l21=l11 l11=l11+[4] print(l11) print('-------') print(*l21) ''' 变量赋值,只是这个变量指向了新的对象 而l21 这个变量 依旧指向原来的对象 [1, 2, 3, 4] ------- 1 2 3 ''' print('---------- func 1----------') # def 对于改变 def my_func1(b): b=2 a=1 my_func1(a) #print(my_func(a)) print(a) # a还是1 print('------------ func 2 -----------') def my_func2(b): b=2 return b a=1 a=my_func2(a) print(a) # 结果是2 la=[1,2,3] lb=[1,2,3] lc=lb print(id(la)) print(id(lb)) print(id(lc)) print('------------ func 1 -----------') def func(d): d['a']=10 d['b']=20 d={'a':1,'b':2} return d d={} print(func(d)) # 1,2 print(d) # 10,20 d=func(d) print(d) # 1,2 print('------------ func 2 -----------') def func2(e): e['a']=10 e['b']=20 e={'a':1,'b':2} e['c']=30 # 后来验证 这个都没有改变e本身 print(e) #return d e={} print(func2(e)) # 1,2 print(e) # 10,20 func2(e) # 1,2, 30 print(e) # 10,20 # 其实 d 和 e 这两个例子 我并不真正完全理解,只能近似想成 # e={'a':1,'b':2} 这个动作 让e 进行了一次新的赋值,这时候其实 e 的对象状态是有两个的, # 全局上 是保留了第一次 提交状态 也就是 10,20 ,,, 而在函数内部 则 被后续步骤改造成 1,2,30
小结:
改变对象本身的动作, append ,pop, 经过 含有return步骤的 func调用,并赋值
不改变对象本身的动作, 简单的赋值

浙公网安备 33010602011771号