美文网首页
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