• 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)

  • 相关阅读:
    Java常用类库(二):Iterator迭代器和子范围视图
    Java常用类库(一) : Object 和日期类的简单使用
    MyBatis的逆向工程
    AdminLTE介绍和zTree的简单使用
    MyBatis分页组件--PageHelper
    SpringAop--系统日志简例
    Shiro
    Mysql(三):多表查询和存储程序
    MySql(二):常见的那些个约束
    正则表达式一些用法
  • 原文地址:https://www.cnblogs.com/danniel-gong/p/13920713.html
Copyright © 2020-2023  润新知