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]]
  • 相关阅读:
    defineProperty的使用
    js题库全集
    如何将多个文件夹中的文件合并到一个文件夹中
    CYQ.Data V5 MDataTable 专属篇介绍
    读取和写入配置文件内容的方法
    面对代码中过多的if...else的解决方法
    SQL语句--删除掉重复项只保留一条
    获取当前时间
    Stopwatch 类用于计算程序运行时间
    正则表达式手册
  • 原文地址:https://www.cnblogs.com/hujc/p/11919800.html
Copyright © 2011-2022 走看看