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']]
  • 相关阅读:
    UOJ#48最大矩形面积
    webbench压力测试工具
    编写NPAPI plugin的命名问题
    搜狗浏览器查看合法插件的方法
    结构型模式之 享元模式
    结构型模式之 外观模式
    结构型模式之 装饰模式
    结构型模式之 桥接模式
    结构型模式之 适配器模式
    Codeforces Round #102 (Div. 2) 题解
  • 原文地址:https://www.cnblogs.com/liangweijiang/p/11816355.html
Copyright © 2011-2022 走看看