zoukankan      html  css  js  c++  java
  • python引用在函数传参时的体现以及可变与不可变对象的对比

    今天偶然看到 vamei 老师的博客 http://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html 讲的是python动态类型以及引用的事儿。才发现python的一个基础也是核心知识没有注意到。

    当给函数传递的参数是不可变类型时,形参和实参本身的改变是互不影响的。

    当给函数传递的参数是可变类型时,形参和实参本省的改变是相互影响的。

    #函数参数是不可变类型
    def f(x):
      x += 1
      print x
    
    x=1
    print x
    f(x)
    print x
    

    执行结果:

    #函数参数是可变类型
    def f(x):
      x[0] += 1
      print x
    
    x=[1,2,3]
    print x
    f(x)
    print x
    

    执行结果:

    可以看出,当参数是可变参数时,函数内部改变这个参数,函数外部会受到影响!

    最后:虽然此时发现x内部的元素变了,但其实如果使用id查看该变量的内存位置,其实依旧没有变化。
    这也即是可变与不可变对象的最大区别。

    不可变对象:变量本身不可变,如果对其做修改,只会默认给你返回一个全新的变量,内存地址和值都是新的。
    可变对象 :变量本身可变,如果对其做修改,会在其自身状态上直接做变化,也就是内存地址不变,而值变化了。

  • 相关阅读:
    HTML学习笔记4----更多元素
    USB协议分析
    USB总线介绍
    SPI驱动程序设计
    SPI子系统
    SPI总线介绍和裸机编程分析
    I2C自编设备驱动设计
    I2C用户态驱动设计
    I2C学习
    MTD系统架构和yaffs2使用、Nandflash驱动设计
  • 原文地址:https://www.cnblogs.com/lipijin/p/4485749.html
Copyright © 2011-2022 走看看