zoukankan      html  css  js  c++  java
  • (python)对象的引用

    对比下列两个例子:

    例子1:

    a=10
    b=a
    a=a+2
    print "a=",a,"b=",b
    

    结果:a= 12 b= 10 

    a+2后,b仍然是10

    例子2:

    aa=[1,2,4]
    bb=aa
    aa.append(3)
    print "aa=",aa,"bb=",bb
    

      

    结果:aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]

    aa增加一个元素3后,bb也增加了元素3

    例子1和例子2为什么会出现两种不同情况呢?

    我们再用id()函数打印出变量a、b、aa、bb的内存地址:

    例子1:

    a=10
    b=a
    print id(a)
    print id(b)
    a=a+2 
    print "a=",a,"b=",b
    print id(a)
    print id(b)
    

      

    结果:

    31815632
    31815632
    a= 12 b= 10
    31815584
    31815632

    说明a、b两个变量一开始指向的是同一个内存地址。而a=a+2后,a变量便不再是之前的那个a变量,而指向了另一个内存地址。但b变量还是之前的那个a变量。

    例子2:

    aa=[1,2,4]
    bb=aa
    print id(aa)
    print id(bb)
    aa.append(3)
    print "aa=",aa,"bb=",bb
    print id(aa)
    print id(bb)
    

    结果:

    38994120
    38994120
    aa= [1, 2, 4, 3] bb= [1, 2, 4, 3]
    38994120
    38994120

    刚开始aa、bb指向的是同一个内存地址。aa.append(3)后,aa和bb仍然指向的是同一个内存地址,所以aa增加一个元素后,bb也跟着增加了一个元素

    
    
    
    

     

  • 相关阅读:
    计算机基础知识
    markdown简介及基本语法
    session和cookie的区别
    MySQL的游标
    数据库单表查询
    外键(有无级联)
    mysql
    数据库引擎
    守护进程和守护线程的区别
    快排等
  • 原文地址:https://www.cnblogs.com/Lival/p/6200449.html
Copyright © 2011-2022 走看看