Python的传值和传址
Python的传值和传址
1. 区别
传值:传递数值,相当于拷贝一个新的,2者互不影响。
传址:传递地址(内存地址/指针),相当于公用1份数据,2者同步。
2. Python的传值和传值
Python是怎么传值的呢。Python是无法决定以什么形式进行传递的,要看数据类型。
Python本质都是对象。万物皆对象。
数据类型【可变】==>>【List,Dict】==>> 传址
# 可变 def func(x): print(x) # [1, 2, 3] x[0] = 100 return x y = [1,2,3] func(y) print(y) # [100, 2, 3]
数据类型【不可变】==>>【int, String,Tuple】==>> 传值(在来一份)
# 不可变 def func(x,y): x = x + 1 y = y - 3 return (x,y) a = 1 b = 10 func(a,b) print('x+y:',func(a,b)) # x+y: (2, 7) print('a:',a) # a: 1 print('b:',b) # b: 10 a=1 def f(b): b=2 return b f(a) print a
或者这样看
# a是不可变的数字 a = 1 b = a a = 2 print(a,b) # 2,1 print(a is b) # False # a是可变的列表 a = [1,2,3] b = a a[0] = 100 print(a,b) # [100, 2, 3] [100, 2, 3] print(a is b) # True
3. 豆知识补充
is和==区别
id()
,type()
,value()
都是查看数据的
【== 比较运算符】 比较2个值的value是否相等
【is 同一性运算符】 比较是否指向同一个对象(本质看
id()
是否相等,相等就是True)
# 不可变数据类型 a = 'hello' b = 'hello' print(a == b) # True print(a is b) # True # 可变数据类型 x = y = [1,2,3] z = [1,2,3] print(x == y) # True print(x is y) # True print(x == z) # True print(x is z) # False print(y == z) # True print(y is z) # False print('x的id:',id(x)) print('y的id:',id(y)) print('z的id:',id(z)) # x的id: 140392781111176 # y的id: 140392781111176 # z的id: 140392781111240
共有评论(0)