zoukankan      html  css  js  c++  java
  • Python3中copy模块常用功能及其他几种copy方式比较

    1、简单的共享引用:

    python中内置有小整数常量池和字符串常量池,在某个范围内的相同的数字或字符串分别赋给不同的变量,这些不同的变量都是指向同一块内存地址,这就是所谓的共享引用,举几个简单的例子:

     
    字符串的共享引用
     
    数字的共享引用

    单纯的变量的传递其实也是一种共享引用:

     
    a,b指向同一个内存地址,任何一方将地址指向的内容做出改变,另外一方会受到影响

    2、字典的copy()方法

    字典的copy()方法相当于一种深复制,即将原本的字典dic1复制出一个内容一模一样的字典给另一个字典变量dic2,dic1和dic2的内容完全相同,但内存地址不同,不是共享引用,其中任何一方做出改变,另外一方不受影响,举个例子: 

    3、copy模块的两种copy方法:copy.copy()和copy.deepcopy()

    首先导入copy模块,import copy

    copy.copy()方法:复制模式跟copy()中参数的类型有关,只能copy最外层(有嵌套时),参数的类型包括可变类型和不可变类型

    1、可变类型:当参数是可变类型时,该方法最外层执行的是深度复制,即复制前后的两个变量地址不同,如果原变量中嵌套有可变类型的元素,那么,内层进行的是浅复制,一方改变,另一方会受影响。(即两个变量地址不同,但指向同一块内存区域)

     
     

    2、不可变类型:当copy()中的参数是不可变类型时,最外层执行浅复制(即两个变量地址相同且指向同一块内存区域),内层也执行浅复制

     

    copy.deepcopy():不管参数是否为可变类型,递归地执行深度复制,如果变量中嵌套可变或不可变的变量,在复制时不管内层还是外层均执行深度复制(有一种情况除外),即另外开辟一块内存空间,把原变量所有的内容都复制一份过来,赋给新的变量,两变量虽然内容相同,但地址不同,且分别指向不同的区域,任意一方内容做出改变,另一方不会受到影响。

    参数为可变类型
    参数为不可变类型

    注意:

    在使用copy.deepcopy()方法时,如果参数为不可变类型,且里面嵌套的对象也是不可变类型,则此方法复制的结果为浅复制(即地址相同)。

     
     
      

     
     
    以上都是我日常工作的学习与总结,希望知识能积少成多,以后的我一定会感激现在努力的自己。。
  • 相关阅读:
    Vector成员为指针时要注意的问题
    (转)C++中的static关键字的总结
    (转)内联(inline)函数与虚函数(virtual)的讨论
    基类类型和派生类型之间的转换以及虚函数
    (转) vector的reserve和resize
    关于函数返回值的一些见解
    (转)感受异或的神奇
    一个mysql不解的问题
    获取本机TCP连接状态信息
    (转)socket的SYN_RECV和ESTABLISHED状态
  • 原文地址:https://www.cnblogs.com/zaochajun/p/11926104.html
Copyright © 2011-2022 走看看