zoukankan      html  css  js  c++  java
  • python中深拷贝和浅拷贝

    # copy.copy 和copy.deepcopy都需要引用copy模块

    1 import copy
    2 # 对于不可变类型(数值,元组,字符串),浅拷贝和深拷贝一样,内存地址都是一样的
    3 a = 2
    4 a2 = copy.copy(a)
    5 a3 = copy.deepcopy(a)
    6 print('a的内存地址是%s: '% id(a))
    7 print('a2的内存地址是%s: '% id(a2))
    8 print('a3的内存地址是%s: '% id(a3))
    1 C:ProgramDataAnaconda3python.exe E:/cnz/day2/深拷贝浅拷贝.py
    2 a的内存地址是8791395856160: 
    3 a2的内存地址是8791395856160: 
    4 a3的内存地址是8791395856160: 

    # 对于可变类型(列表,字典),分两种情况

     1 # 列表或者字典没有嵌套的情况下,浅拷贝和深拷贝内存地址与原对象都是不一样的,改变浅拷贝的值,不会影响原来的值
     2 li = [1,2,3]
     3 li2 = copy.copy(li)
     4 li3 = copy.deepcopy(li)
     5 print('li 的内存地址是%s: ' % id(li))
     6 print('li2 的内存地址是%s: ' % id(li2))
     7 print('li3 的内存地址是%s: ' % id(li3))
     8 
     9 # 改变li2的值
    10 li2[0] = 4
    11 print(li)
    12 print(li2)
    13 print(li3)
    1 li 的内存地址是43566728: 
    2 li2 的内存地址是43565704: 
    3 li3 的内存地址是43634632: 
    4 [1, 2, 3]
    5 [4, 2, 3]
    6 [1, 2, 3]
     1 # 列表中嵌套列表的情况,如果改变外层列表,浅拷贝的值不会变,如果改变原内层列表的值,浅拷贝的内层列表值也会改变,以为内层列表的内存地址是一样的
     2 
     3 l = [1,2,[1,2]]
     4 l2 = copy.copy(l)
     5 l3 =copy.deepcopy(l)
     6 print('l的内存地址是%s: '% id(l))
     7 print('l2的内存地址是%s: '% id(l2))
     8 print('l3的内存地址是%s: '% id(l3))
     9 l[2][0] = 3
    10 print('l是%s' % l)
    11 print('l2是%s' % l2)
    12 print('l3是%s' % l3)
    1 l的内存地址是43634504: 
    2 l2的内存地址是43634568: 
    3 l3的内存地址是43610184: 
    4 l是[1, 2, [3, 2]]
    5 l2是[1, 2, [3, 2]]
    6 l3是[1, 2, [1, 2]]
  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/hujc/p/11919800.html
Copyright © 2011-2022 走看看