zoukankan      html  css  js  c++  java
  • Python 全栈开发十一 深浅拷贝

    深浅拷贝

    深浅拷贝的前提:  

    • 相等和相同的关系
    • 深浅拷贝针对的是列表等可变的数据类型。
    • 深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义。
     1 a = "aaa"
     2 a1 = "aaa"
     3 b = a
     4 print(a == a1)
     5 print(id(a),id(a1),id(b))   #都一样
     6 print(a == b)
     7 
     8 c = [1,2,3]
     9 c1 = [1,2,3]
    10 d = c
    11 print(c == c1)
    12 print(id(c),id(c1),id(d))   #c1不一样
    13 print(c == d)

    字符串没有copy方法:

    1 # st = "aaa"
    2 # st2 = st.copy()  会报错,str没有copy方法

    普通列表拷贝就是生成一个新的列表,两者值形同,但id不同,且更改其中一个列表的值不影响另一列表的值:

    1 #普通列表拷贝
    2 li = ["a",1,2]
    3 li2 = li.copy()
    4 print(li == li2)   #True
    5 print(li is li2)   #False
    6 print(id(li),id(li2))  #id不同
    7 li[0] = 1
    8 print(li)    #li的改变不会更改li2的值,因为两者指的是不同的对象
    9 print(li2)

    嵌套列表浅拷贝,两者值相同,id不同,更改非嵌套的值不影响另一列表,更改嵌套列表的值会影响另一列表。

     1 li3 = [1,2,[3,4]]
     2 li4 = li3.copy()
     3 print(li3 == li4)    #True
     4 print(li3 is li4)    #False
     5 print(id(li3),id(li4))  #id不同
     6 
     7 li3[0] = 3
     8 print(li3)    #更改非嵌套列表的元素,不会更改li4的值
     9 print(li4)
    10 
    11 li3[2][0] = 2
    12 print(li3)    #修改嵌套列表的值,会改变li4的值
    13 print(li4)

    深拷贝嵌套列表,两者值相同,id不同,更改列表的值,都不会影响另一列表,即两者完全不相干。

    1 li5 = copy.deepcopy(li3)  
    2 li5[2][0] = 5
    3 print(li5)  #[1,2,[5,4]
    4 print(li3)  #[1,2,[3,4]]
  • 相关阅读:
    openoffice centos7.4 安装
    zabbix 监控wind登录状态
    centos7.4 nfs-2.3.2
    zabbix 监控iptables
    docker端口映射和容器互相访问
    docker端口映射和容器互相访问
    PostgreSQL unlogged表
    docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移
    利用docker搭建本地私有镜像仓库
    docker安装详解
  • 原文地址:https://www.cnblogs.com/tashanzhishi/p/8976209.html
Copyright © 2011-2022 走看看