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']]
  • 相关阅读:
    第一次博客园作业
    弹性布局/流动式布局
    元素在网页或视口上位置的相关问题求解
    element
    给body设置高度
    盒模型宽高的获取和设置
    选择器
    变量、作用域和内存问题
    js之捕捉冒泡和事件委托
    transition transform animate的使用
  • 原文地址:https://www.cnblogs.com/liangweijiang/p/11816355.html
Copyright © 2011-2022 走看看