• python里面的引用


    1 对象及其引用

    python中,引用是用命名空间来实现的,命名空间维护了变量和对象之间的引用关系。

    1 myInt = 27
    2 yourInt = myInt
    3 
    4 #change the value of yourInt
    5 yourInt = yourInt + 5

    改变值的过程中,命名空间快照如下:

      、

    如上图所示,每个不可变对象的操作都将创建指向新对象的引用。

    对于可变对象,情况会不一样。

    1 list1 = [1, 2, 3]
    2 list2 = list1
    3 
    4 #list1 append a new element
    5 list1.append(4)
    6 
    7 print(list1)
    8 print(list2)

    对list1的改变已经反映到了list2中,list1、list2均引用同一个对象。

    2 深复制与浅复制

     1 >>> list1 = [1, 2, 3]
     2 >>> list2 = [4, 5, 6]
     3 >>> list1.append(list2)  #将列表2添加到列表1中
     4 >>> list1
     5 [1, 2, 3, [4, 5, 6]]
     6 >>> list3 = list2    #给这个列表另一个名字
     7 >>> list3
     8 [4, 5, 6]
     9 >>> list2 is list3
    10 True
    11 >>> list3[2] = 66   #重新赋值
    12 >>> list3
    13 [4, 5, 66]                #列表3变化,正常
    14 >>> list2
    15 [4, 5, 66]                 #列表2变化 ,正常
    16 >>> list1
    17 [1, 2, 3, [4, 5, 66]]   #列表1也变化了,神马情况

    具体情况如下图:

    如上,将list2加入list1时,只是复制了应用,没有复制对象本身的情况,称为浅拷贝。要复制内容,而不是简单的复制引用,称为深拷贝。

    在copy模块中,有deepcopy函数,在需要时,强制进行深拷贝。

    编程技巧: 对引用可变对象的变量进行操作,可能会改变对象本身或者创建一个新的对象。对引用不可变对象的变量进行操作,

    只会创建新的对象

  • 相关阅读:
    扩展正则表达式 练习题
    Linux特殊符号
    文件属性下
    文件属性和ls -lhi
    复习之前的和补充一些内容
    第二关练习题总结完结
    云服务器防ssh攻击
    实验四+085
    实验3+085
    第5次作业+085
  • 原文地址:https://www.cnblogs.com/tianxiaozz/p/3394750.html
Copyright © 2020-2023  润新知