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

     1、对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

    import copy
    # ######### 数字、字符串 #########
    n1 = 123
    # n1 = "evescn"
    print(id(n1))
    
    # ## 赋值 ##
    n2 = n1
    print(id(n2))
    
    # ## 浅拷贝 ##
    n2 = copy.copy(n1)
    print(id(n2))
     
    # ## 深拷贝 ##
    n3 = copy.deepcopy(n1)
    print(id(n3))
    
    
    # 输出结果
    491687936
    491687936
    491687936
    491687936  

     

     2、对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

    赋值,只是创建一个变量,该变量指向原来内存地址,如:

    import copy
    
    a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
    
    a2 = a1
    
    # 输出结果
    35047048
    35047048  

     

    浅拷贝,在内存中只额外创建第一层数据

    import copy
     
    a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
     
    a3 = copy.copy(a1)
    
    print(id(a1))
    print(id(a3))
    print(id(a1['job']))
    print(id(a3['job']))
    
    # 输出结果
    5949064
    35737672
    36063304
    36063304  

     

    深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

    import copy
    
    a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
    
    a4 = copy.deepcopy(a1)
    
    print(id(a1))
    print(id(a4))
    print(id(a1['job']))
    print(id(a4['job']))
    
    # 输出结果
    35243656
    35244040
    44320840
    44264136  

     

  • 相关阅读:
    docker容器导出导入
    docker容器stop不了问题的处理
    weblogic server 后台命令启动
    查看Linux系统版本的命令
    Oracle12c修改字符集
    Oracle导出导入时客户端字符集设置
    centos7 防火墙开放端口
    docker仓库安装
    spring boot打war包的修改内容
    连接谷歌gee
  • 原文地址:https://www.cnblogs.com/evescn/p/7554920.html
Copyright © 2011-2022 走看看