zoukankan      html  css  js  c++  java
  • Python中的深拷贝与浅拷贝

    浅拷贝只拷贝了最顶层的,深拷贝拷贝了所有

    拷贝牵扯到以下几种形式:

    • 赋值操作符=
    • copy.copy
    • copy.deepcopy
    • 列表中的切片[:]
    • 字典中的拷贝.copy()
    • 列表作为函数参数

    1. 当拷贝内容为可变类型时

    首先以列表为例,来看python中的深拷贝与浅拷贝:

    如下图,a和b的地址是一样的,b只是指向了a的地址。

    copy.copy后,d只是开辟了一段新的空间,拷贝了c的引用

    copy.deepcopy,是直接拷贝了内容。

     简单总结:=就是指向原地址,copy.copy会开辟一个新地址,内部拷贝了可变类型当时的引用;copy.deepcopy所有元素都拷贝

    2. 当拷贝内容为不可变类型时

    这里以元组为例

    简单总结:当拷贝的内容为不可变类型,无论哪种方法都只是简单引用,不会开辟新地址

    3. 当拷贝内容为不可变类型但包含可变类型

    简单总结:只要包含可变元素,deepcopy就完全拷贝

    4. 列表切片中的拷贝

    简单总结:列表切片中的拷贝,可copy.copy一样,是浅拷贝

    5. 字典中的拷贝

    基本认识:字典是无序的,每一个key通过哈希来得到,字典中存储的是key的引用

    6. 列表作为函数参数传入

  • 相关阅读:
    设计模式-抽象工厂
    设计模式-工厂方法
    设计模式-简单工厂
    设计模式-单例模式
    设计模式使用指南
    适合Java程序员看的UML学习手册
    第六周 Java8新特性
    deepin15.11系统使用罗技k380键盘
    动态规划系列之六01背包问题
    《比勤奋更重要的是底层思维》
  • 原文地址:https://www.cnblogs.com/yunxiaofei/p/11185362.html
Copyright © 2011-2022 走看看