zoukankan      html  css  js  c++  java
  • python的浅复制与深复制

    简单一点吧,太长了看不下去。。。。

    copy.copy:浅拷贝,只拷贝父元素,不会拷贝子元素(的引用)。
    copy.deepcopy: 深拷贝,拷贝父元素及其子元素(的引用)。

    或许,例子更快一些:

    import copy
    
    s1 = [1, 2, 3, [4, 5], '666']
    print(s1)
    
    s2 = s1  #直接传递引用(可以看做传递的是地址)
    print(s2)
    
    s3 = copy.copy(s1)  #浅复制
    print(s3)
    
    s4 = copy.deepcopy(s1)  #深复制
    print(s4)

    很明显这四个值都是一样的。。。

    那么,当修改S1的值呢?

    # 修改s1的值
    s1.append('gogogo!')
    print(s1)
    print(s2)
    print(s3)
    print(s4)

    咦,是不是跟想象的不太一样?

    那么再修改S1的子元素呢

    # 修改s1的子元素值
    s1[3].append('hello')
    print(s1)
    print(s2)
    print(s3)   #为什么呢? 可以看做浅复制拷贝的是子元素的地址(引用),当子元素里面的值改变时,由于子元素地址并没有变,于是浅复制得到的值也被改变了
    print(s4)   #而深复制连子元素的内部值的地址也拷贝了

    现在是不是如你所愿了。。。

    查看元素地址 id函数

    print(id(s3[3]))
    print(id(s1[3]))

    ##

    参考:

    https://www.jb51.net/article/15714.htm

  • 相关阅读:
    Storm 第一章 核心组件及编程模型
    四 Hive整合HBase
    Hbase第五章 MapReduce操作HBase
    swift 附属脚本
    swift 方法
    swift 属性
    swift 类和结构体
    swift 枚举类型
    swift 闭包
    Swift 函数
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12577422.html
Copyright © 2011-2022 走看看