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]]
  • 相关阅读:
    hdu 3342 Legal or Not 拓排序
    hdu 1596 find the safest road Dijkstra
    hdu 1874 畅通工程续 Dijkstra
    poj 2676 sudoku dfs
    poj 2251 BFS
    poj Prime Path BFS
    poj 3278 BFS
    poj 2387 Dijkstra 模板
    poj 3083 DFS 和BFS
    poj 1062 昂贵的聘礼 dijkstra
  • 原文地址:https://www.cnblogs.com/tashanzhishi/p/8976209.html
Copyright © 2011-2022 走看看