zoukankan      html  css  js  c++  java
  • python参数传递:对象的引用

      大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。 

    python采用的是传递对象的引用,为了方便说明,我们来看一个例子:

    test = [1]
    def change1(a):
        a = [2]
    
    def change2(a):
        a.append(3)
    
    change1(test)
    change2(test)
    print test

    我们来看一下最后的输出: 
    [1,3] 
    是不是有人误以为是[2,3]?那你可得好好看接下来的内容。 
    传参传的是对象的引用!!!!!! 
    所以在change1(a)函数中,我们知道形参a与test引用了同一块内存空间,然后a在函数内部被修改了,它执行了另一块内存空间,也就是存放[2]的地方,但是只是a的指向改变了,test的指向还是存放[1]的内存空间。所以,接下来change2()对这块内存空间上放的值进行了修改,就得到了我们最后看到的结果。 
    为了加深理解,我觉得有必要再举一个类继承的例子:

    class Parent(object): 
    
      x = 1class Child1(Parent): 
    
      passclass Child2(Parent): 
    
      passprint Parent.x, Child1.x, Child2.x 
    
    Child1.x = 2print Parent.x, Child1.x, Child2.x 
    
    Parent.x = 3print Parent.x, Child1.x, Child2.x​
    
    输出结果为:
    
    1 1 1
    
    1 2 1
    
    3 2 3

    在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了

  • 相关阅读:
    Flask-上传文件和访问上传的文件
    苹果审核加急信
    iTunes Connect 协议更新
    iOS 关于Xcode上的Other linker flags
    cocoaPods
    iOS 支付宝的集成与遇到的问题
    iOS中app在iTunes中更新版本流程
    iOS集成支付宝问题
    iOS 获取键盘下落速度
    iosMD5加密和base64加密
  • 原文地址:https://www.cnblogs.com/insane-Mr-Li/p/9691449.html
Copyright © 2011-2022 走看看