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

    • 数字和字符串

    对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

    #赋值 
    n1 = 123
    print(id(n1))
    n = n1
    print(id(n))

    输出结果:

      140721961362272
      140721961362272

    #浅拷贝
    import copy
    #数字
    n1 = 123
    print(id(n1))
    a = copy.copy(n1)
    print(id(a))
    #字符串
    n2 = "you are a pig"
    b = copy.copy(n2)
    print(id(n2))
    print(id(b))

    输出结果:

      #数字

        140721970013024
        140721970013024

      #字符串
        1373912335728
        1373912335728

    #深拷贝
    import copy
    #数字
    n1 = 123
    print(id(n1))
    a = copy.deepcopy(n1)
    print(id(a))
    #字符串
    n2 = "you are a pig"
    b = copy.deepcopy(n2)
    print(id(n2))
    print(id(b))

    输出结果:

      #数字

        140721970013024
        140721970013024

      #字符串
        1869362529648
        1869362529648

    • 其他基本数据类型

      对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

    • 赋值:

      赋值,只是创建一个变量,该变量指向原来内存地址,如:

    '''赋值'''
    n1 = ["you","are",["a","pig"]]
    n2 = n1
    print(id(n1))
    print(id(n2))

    输出结果:

      2480562397832
      2480562397832

    • 浅拷贝:

      对于可变对象如:列表、字典,直接赋值时只会将一个对象的引用传递给另一个对象,此时修改其中一个对象就会改变另一个对象;大多数情况下,一个可变对象内还可以嵌套其它可变对象,此时浅拷贝只会拷贝顶级对象,而对于嵌套的对象,只会复制它的引用,所以修改顶级对象不会影响另一个对象,但是如果修改嵌套的对象就会影响两个对象。

    '''复制(浅拷贝)'''
    import copy
    n1 = ["you","are",["a","pig"]]
    n3 =copy.copy(n1)
    n1[2][1] = "BIG_PIG"
    print(n1)
    print(id(n1))
    print(n3)
    print(id(n3))

    输出结果:

      ['you', 'are', ['a', 'BIG_PIG']]
      1614775337864
      ['you', 'are', ['a', 'BIG_PIG']]
      1614775224776

      由结果可知,浅拷贝只拷贝第一层的元素。

    • 深拷贝:

      深拷贝就是将顶级对象以及子对象的值同时复制给新对象,此时修改任何一个都不会影响另一个。

    '''深拷贝'''
    import copy
    n1 = ["you","are",["a","pig"]]
    n3 =copy.deepcopy(n1)
    n1[2][1] = "BIG_PIG"
    print(n1)
    print(id(n1))
    print(n3)
    print(id(n3))

    输出结果:

      ['you', 'are', ['a', 'BIG_PIG']]
      2350443541576
      ['you', 'are', ['a', 'pig']]
      2350443432712

      由结果可知,深拷贝是拷贝最深层的元素。

  • 相关阅读:
    Python常用内置函数整理(lambda,reduce,zip,filter,map)
    C#中Hashtable容器的了解与使用
    关于ref与out的区别
    关于多线程学习总结(五) 线程池
    关于多线程学习总结(四) 锁
    关于多线程学习总结(三) 线程简单基本操作
    关于多线程学习总结(二) 了解线程的属性及方法
    关于多线程学习总结(一) 基本概念了解
    CSS文件和Javascript文件的压缩
    看几道JQuery试题后总结(下篇)
  • 原文地址:https://www.cnblogs.com/Chestnut-g/p/10432186.html
Copyright © 2011-2022 走看看