zoukankan      html  css  js  c++  java
  • python基础学习9----深浅拷贝

    数据类型有可变类型和不可变类型

    不可变类型:整型,长整型,浮点数,复数,布尔,字符串,元组

    可变类型:列表,字典

    浅拷贝

    简单说只对第一层进行拷贝,如下对于列表中的列表的数据进行改变,list1和list2会相互影响

    实际是list1和list2中的列表[1,2]的内存地址存储的是相同的,改变的是[1,2]内存地址所指向的数据,所以list1和list2会相互有影响

    list1=[[1,2],3,4]
    list2=list1.copy()#浅拷贝
    list2[1]=5
    print(list1)#[[1, 2], 3, 4]
    print(list2)#[[1, 2], 5, 4]
    
    list2[0][0]=6
    print(list1)#[[6, 2], 3, 4]
    print(list2)#[[6, 2], 5, 4]
    

    深拷贝

    将内容复制的更彻底,重新开辟内存空间,list1和list2相互没有影响

    import copy
    
    list1=[[1,2],3,4]
    list2=copy.deepcopy(list1)#深拷贝
    #list2=copy.copy(list1)此处若这样写则和浅拷贝相同
    list2[1]=5
    print(list1)#[[1, 2], 3, 4]
    print(list2)#[[1, 2], 5, 4]
    
    list2[0][0]=6
    print(list1)#[[1, 2], 3, 4]
    print(list2)#[[6, 2], 5, 4]
    

    对于全部都是不可变类型的数据,无论是浅拷贝还是深拷贝,最终两个数据指向的地址都是相同的

    import copy
    
    list1=[[1,2],3,4]
    list2=copy.deepcopy(list1)
    print(id(list1))#2517190549256
    print(id(list2))#2517190547976
    #此处两个id不同
    
    a = 1
    b = copy.deepcopy(a)
    print(id(a))#140705811977248
    print(id(b))#140705811977248
    #此处两个id相同
    

      

  • 相关阅读:
    ural 1146. Maximum Sum(动态规划)
    ural 1119. Metro(动态规划)
    ural 1013. K-based Numbers. Version 3(动态规划)
    Floyd算法
    杭电21题 Palindrome
    杭电20题 Human Gene Functions
    杭电15题 The Cow Lexicon
    杭电三部曲一、基本算法;19题 Cow Bowling
    杭电1002 Etaoin Shrdlu
    Qt 学习之路 2(37):文本文件读写
  • 原文地址:https://www.cnblogs.com/sfencs-hcy/p/9606275.html
Copyright © 2011-2022 走看看