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()方法时,如果参数为不可变类型,且里面嵌套的对象也是不可变类型,则此方法复制的结果为浅复制(即地址相同)。

 
 
   

 
 



作者:LittlePy
链接:https://www.jianshu.com/p/0394be0247db
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自www.cnblogs.com/zaochajun/p/11926104.html