Python的赋值和传参
2020-03-31 本文已影响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中函数的参数传递过程,实际上就是实参赋值给形参的过程。