美文网首页
Python的赋值和传参

Python的赋值和传参

作者: 一个扫地的垃圾 | 来源:发表于2020-03-31 23:44 被阅读0次

1. python中的赋值过程

python赋值语句a = XXX,实际上就是a保存了XXX的存储地址。

python对象类型:

  • 不可变类型对象:整数、小数、复数、字符串、元组
  • 可变类型:列表、字典、集合

不可变类型对象

更改不可变类型对象会改变数据存储的地址,例如:

a = 123
print("a存储的地址为", id(a))
b = a
print("b存储的地址为", id(b))
a = 100
print("改变之后a的地址为", id(a))

输出结果:

a存储的地址为 4401750912
b存储的地址为 4401750912
改变之后a的地址为 4401750176

由此可见,改变前后a的地址发生了改变,而b所指向的地址没有发生改变。

可变类型对象

更改可变类型对象不会改变数据存储的地址,例如:

li = [1, 2, 3]
print(id(li))
print(id(li[0]))
print(id(li[1]))
print(id(li[2]))
li[0] = 10
print("")
print(id(li))
print(id(li[0]))
print(id(li[1]))
print(id(li[2]))

输出结果:

li存储的地址为 4338319176
li第一个元素存储的地址为 4337198144
li第二个元素存储的地址为 4337198176
li第三个元素存储的地址为 4337198208
更改li的第一元素之后:
li存储的地址为 4338319176
li第一个元素存储的地址为 4337198432
li第二个元素存储的地址为 4337198176
li第三个元素存储的地址为 4337198208

由此可见,li的地址没有发生改变,但是li的第一个元素的地址发生了改变。

2. python中函数的传递参数过程

函数的参数传递过程分为两种情况:

  • 传值:形参和实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数内修改形参并不会影响到实参。
  • 传引用:实参的地址传递给形参的过程,函数内修改会直接导致实参发生变化。

传值

传递的参数为不可变类型对象,则传递的过程为传值

def add(num):
    num += 1

x = 1
add(x)
print(x)

输出结果:

1

传引用

传递的参数为可变类型对象,则传递的过程为传引用

def add(li):
    li[0] += 1

x = [1, 2, 3]
add(x)
print(x)

输出结果:

[2, 2, 3]

python中函数的参数传递过程,实际上就是实参赋值给形参的过程。

相关文章

网友评论

      本文标题:Python的赋值和传参

      本文链接:https://www.haomeiwen.com/subject/hmpnuhtx.html