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

  • 相关阅读:
    Codeforces Round #183 (Div. 2) B. Calendar
    FZU Problem 2030 括号问题
    NEU(1262: ASCII Sequence II)动态规划
    ZOJ(1711)Sum It Up (DFS+剪枝+去重复)
    ZOJ(1004)Anagrams by Stack (DFS+stack)
    HDU(3374) (KMP + 最小表示法)
    FZU Problem 1926 填空(KMP好题一枚,确实好)
    POJ(2481)Cows 树状数组
    HOJ (1042) 整数划分
    LeetCode: Two Sum
  • 原文地址:https://www.cnblogs.com/danniel-gong/p/13920713.html
Copyright © 2020-2023  润新知