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. 列表作为函数参数传入

  • 相关阅读:
    How many ways
    HDOj-1016 Prime Ring Problem
    DHU-1241 Oil Deposits
    Red and Black
    HDU-3790 最短路径问题
    vim/Gvim配置
    lintcode431- Connected Component in Undirected Graph- medium
    lintcode120- Word Ladder- medium
    lintcode531- Six Degrees- medium- microsoft
    lintcode624- Remove Substrings- medium
  • 原文地址:https://www.cnblogs.com/yunxiaofei/p/11185362.html
Copyright © 2011-2022 走看看