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']]
  • 相关阅读:
    (数学)Knight's Trip -- hdu -- 3766
    (DP 雷格码)Gray code -- hdu -- 5375
    (简单匹配)Card Game Cheater -- hdu --1528
    (数论)LightOJ -- 1245
    (树状数组+离散化)lines--hdu --5124
    01项目需要用到的jquery函数介绍
    jdbc基础
    基础加强
    jdbc
    01-1项目所需小工具
  • 原文地址:https://www.cnblogs.com/liangweijiang/p/11816355.html
Copyright © 2011-2022 走看看