zoukankan      html  css  js  c++  java
  • 深浅拷贝

    浅拷贝:只拷贝第一层

    深拷贝:拷贝所有数据(可变类型),一般发生在嵌套类型中

    可变类型:列表,集合,字典

    不可变类型:数字,布尔,字符串

    特殊情况:元组是不可变类型

    示例一:

    浅拷贝时,只拷贝第一层,字符串类型是不可变类型(由于小数据池缘故)未重新拷贝
    不可变类型,深浅拷贝地址不变

    v1="alex"
    import copy
    v2=copy.copy(v1)print(id(v1),id(v2))#地址不变v3=copy.deepcopy(v1)print(id(v1),id(v3))#地址不变

    示例二:

    列表是可变类型,深浅拷贝地址都不一样

    v1=[1,2,3,4]
     import copy
     v2=copy.copy(v1)
     print(id(v1),id(v2))#地址改变
     v3=copy.deepcopy(v1)
     print(id(v1),id(v3))#地址改变

    示例三:

    #列表嵌套
     v1=[1,2,3,[11,22,33]]
     import copy
     v2=copy.copy(v1)
     print(id(v1),id(v2))#不同
     print(id(v1[3]),id(v2[3]))#同,浅拷贝只拷贝第一层
    v3=copy.deepcopy(v1)
     print(id(v1),id(v3))#不同
     print(id(v1[3]),id(v3[3]))#不同

    练习

    练习1import copy v1=[1,2,3] v2=copy.copy(v1) print(v1==v2)#true print(v1 is v2)#falseprint(v1[0] is v2[0])#true练习2 import copy v1=[1,2,3] v2=copy.deepcopy(v1) print(v1==v2)#trueprint(v1 is v2)#false
    # print(v1[0] is v2[0])#true
    #练习3
    # import copy
    # v1=[1,2,3,{'k1':123,'k2':456}]
    # v2=copy.deepcopy(v1)
    # print(v1==v1)#true
    # print(v1 is v2)#false
    # print(v1[0]is v2[0])#true
    # print(v1[3]==v2[3])#true
    # print(v1[3] is v2[3])#false

    #特殊情况:元组不可变类型,地址不变

    #1不嵌套
    v1=(1,2,3,4,)
    import copy
    v2=copy.copy(v1)
    print(id(v1),id(v2))
    v3=copy.deepcopy(v1)
    print(id(v1),id(v3))
    #嵌 套
    v1=(1,2,[1,2,3],4,)
    import copy
    v2=copy.copy(v1)
    print(id(v1),id(v2))#不变
    v3=copy.deepcopy(v1)
    print(id(v1),id(v3))#
  • 相关阅读:
    oracle列合并
    Java移位操作符
    angularjs 事件向上向下传播
    angularjs 路由 ngRoute tab切换
    angularjs 自定义服务
    angularjs 服务供应商
    angularjs 缓存 $q
    angularjs $location 服务
    angularjs $http 服务
    angularjs 自定义指令 directive
  • 原文地址:https://www.cnblogs.com/tengteng0520/p/11241653.html
Copyright © 2011-2022 走看看