• python 参数传递 传值还是传引用


    个人推测结论:

    可变对象传引用,不可变对象传值

    python里的变量不同于c中地址储值模型

    a=100
    b=100
    print(id(a),id(b),a==b,a is b)  #8790877986944 8790877986944 True True
    

    这两个变量id相同,值相等,如果 a=a+1,a的id也变了 浮点数也是这样
    看成和str tuple一样的不可变对象,实际操作可以改变,但都是副本操作
    暂且管它叫不可变对象的副本操作

    def f(x):
        x+=100
        return x
    a=100
    f(a)  #直接传变量  变量传值
    print(a) # 100
    
    def fn(data):
        for i in range(len(data)):
            data[i]+=1
    l = [3,5,7]
    fn(l)  #直接传改变原对象  list传引用 
    print(l) #[4, 6, 8]
    
    #以下是传副本方式 不改变原对象
    l2 = [1,2,3]
    fn(l2.copy()) 
    print(l2) #[1, 2, 3]
    fn(l2[:])
    print(l2) #[1, 2, 3]
    
    #str 不可变对象是传值
    s = "do you like me!"
    def str_answer(s):
        s=s+" No way!"
        print(s)
    str_answer(s)
    print(s)
    print(s.upper()) #return a copy
    print(s)
    
  • 相关阅读:
    适配器模式
    第五章项目:QuickHit
    试题分析(第二套)
    试题分析(第一套)
    新闻发布系统(分页显示)
    jsp九大内置对象
    文件上传
    jsp统测
    新闻发布系统(首页)
    URL和URI的区别
  • 原文地址:https://www.cnblogs.com/ShawSpring/p/10543923.html
Copyright © 2020-2023  润新知