Python 浅拷贝(shadow copy)(转)

python作为一门开源的解释性语言,在不断的开发与完善之中。这门语言的最大特点就是比别的编程语言更接近于自然语言,可读性更好。给初学编程的同学一个很好的切入点,让对编程的学习变得不再枯燥无味,不再像面对C语言冰冷的指针不会操作而发愁。但是,python这么人性化,把程序的功能分装的这么易读,还是有所牺牲的。因为对功能整体的封装,所以产生了一些特殊的,在一半编程语言下没有的逻辑处理方式。下面我来给大家介绍一下,python中一般不为人知的浅拷贝。

 

三种拷贝

说到拷贝,其本意是将一个变量的值符给另一个变量。对比别的编程语言,一个等于好就搞定的事,在python中的一些情况下并没有这么简单。对于一般的变量来说,复制它用等于号即可。但是对于python中的数组就不是这样了。首先,python的数组分为list和tuple。List是一种可以被改变的数组,用中括号表示。Tuple是在生成之后不可变的数组,用圆括号表示。Python中拷贝的特殊是针对于list而言的,并且不只指拷贝的过程不同,拷贝的结果在系统中存在的形式也不同。其次,我们来讲讲三种对list的拷贝方式。1:直接复制(用等于号)这样做的结果是什么呢?就是相当于老的list的引用(reference type的形式)交给了新的list,相当于将指针进行了传递。这么做当改变老list的时候新的list也会改变。所以并没有真正的分离重新生成list,因此不能满足有些时候对程序设计的特殊需求。2: shadow copy浅拷贝,这种拷贝是指当拷贝的数组具有复杂结构的时候,将表层结构copy,而自数组不做复制,因此相当于表层的数组是重新创建并且复制老list的,但是当老list的子数组改变的时候,新list中的子数组也会改变。因此有时也不能满足编程的需求。3: deep copy 深拷贝,根据前面的逻辑,这个深层拷贝意思就很明了了。意思就是将一个复杂数组的任何一层都复制,新的list不再和老list藕断丝连,而是一刀两断,内容复制但是不在关联。

 

使用方法

第一种就是用等于号。

第二种和第三种:首先import copy

 

然后在需要复制的时候调用copy下的函数,浅拷贝是copy.copy(拷贝的内容)

例子:新list=copy.copy(老list)

深层拷贝是copy.deepcopy(拷贝的内容)

例子:新list=copy.deepcopy(老list)

posted @ 2020-11-03 15:54  Danniel_gong  阅读(322)  评论(0编辑  收藏  举报