...

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)

登陆即可评论哦