zoukankan      html  css  js  c++  java
  • 浅谈python中的引用和拷贝问题

    一.引用

    a = ['a', 'b', 'c']
    b = a
    print(id(a))
    print(id(b))
    
    
    135300560
    135300560

      可以看到,变量a 和 b 的 id是完全一样的,这就说明a和b是同时指向内存的同一个区域的,即b随a的变化而变化.

    a = ['a', 'b', 'c']
    b = a
    a[1] = 'd'
    print(b)
    b[2] = 'e'
    print(a)
    
    ['a', 'd', 'c']
    ['a', 'd', 'e']

    二.浅拷贝  

      浅拷贝只是复制了的父对象,即复制后的变量和复制前的子对象还是指向同一个对象

      浅拷贝可以写为 copy.copy(obj) 或者 obj.copy()

    import copy
    a = ['a', 'b', ['c', 'd', 'e']]
    b = copy.copy(a)
    a.append('e')
    print(b)
    a[0] = 'g'
    print(b)
    a[2].append('f')
    print(b)
    
    

    ['a', 'b', ['c', 'd', 'e']]
    ['a', 'b', ['c', 'd', 'e']]
    ['a', 'b', ['c', 'd', 'e', 'f']]

           画个图来理解就是如下:

     当只有a元素的子元素里的元素有变化时,b才会引起改变

    三.深拷贝

      深拷贝就比较好理解了,它相当于开辟了一个新空间是新指针指向新的空间,无论原对象怎么变化,新对象都不变

    import copy
    a = ['a', 'b', ['c', 'd', 'e']]
    b = copy.deepcopy(a)
    a.append('e')
    print(b)
    a[0] = 'g'
    print(b)
    a[2].append('f')
    print(b)
    
    
    ['a', 'b', ['c', 'd', 'e']]
    ['a', 'b', ['c', 'd', 'e']]
    ['a', 'b', ['c', 'd', 'e']]
  • 相关阅读:
    MYSQL数据库导入SQL文件出现乱码解决方法
    Mysql设置允许用户可以连接
    MongoDB 设置权限认证
    NodeJs 服务端调试
    Hudson 定时编译
    Ubuntu上NodeJs环境安装
    新开通博客
    war类型项目创建
    Maven项目创建
    Maven简介与配置
  • 原文地址:https://www.cnblogs.com/liangweijiang/p/11816355.html
Copyright © 2011-2022 走看看