zoukankan      html  css  js  c++  java
  • 函数传参涉及到副本的创建与拷贝问题分析

    遇到一个问题,是这样的:

    b = [1, 2, 3]
    
    
    def aaa(b):
        b.append(4)
    
    
    def bbb(b):
        b = 5
    
    
    aaa(b)
    print(b)  # [1, 2, 3, 4]
    
    bbb(b)
    print(b)  # [1, 2, 3, 4]

    为什么呢,为什么通过函数传参,去修改参数,结果不一致呢?

    原因是因为函数传参涉及到了参数副本的创建与拷贝,具体详解:

    圆圈2为传参时函数建立的传入变量(圆圈1)的副本,他们拥有共同的指向(圆圈3)。那么显然在函数中,如果将副本重新指向一块新的内存,传入变量(圆圈1)的指向并不会改变,换句话说这种操作并不能影响函数外的变量。

      也就是说,源地址和副本地址2个指向相同的地址,这个地址是可以变的list形式, 那么aaa函数只是给这个共同的指向地址的内容中添加了数据,没有改变指向地址,所以结果不变

      但是函数bbb,就不一样了,它要修改副本的地址指向,所以就这样了.

    参考博客:  https://blog.csdn.net/Lin_RD/article/details/88088217 

     

  • 相关阅读:
    dw2018修改为中文
    C# 响应一个html页面
    layui 时间控件 单击 年直接赋值
    js 正则 测试
    python之读取和写入csv文件
    python安装与配置
    hive支持sql大全
    HiveQL与SQL区别
    Hadoop插件安装
    简单算法学习之快速排序详解
  • 原文地址:https://www.cnblogs.com/yuanyongqiang/p/10877496.html
Copyright © 2011-2022 走看看