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

    一、引言

    在python中对象赋值实际上是对象的引用,当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个现象,而只是拷贝了这个对象的引用

    二、拷贝

    如果l2是l1的拷贝对象,则l1内部的任何数据 类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值表id不变

    l1=['a','b','c',['d','e','f']]
    l2=l1
    l1.append('g')
    print(l1)  ##['s','b','c',['d','e','f'],'g']
    print(l2)   ##['s','b','c',['d','e','f'],'g']
    

    三、浅拷贝

    如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变

    import copy
    l1=['a','b','c',['d','e','f']]
    l2=copy.copy(l1)
    l1.append('g')
    print(l1)   ##['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    print(l2)   ##['a', 'b', 'c', ['d', 'e', 'f']]
    
    import copy
    l1=['a','b','c',['d','e','f']]
    l2=copy.copy(l1)
    l1.append(['g','h','i'])
    print(l1)   ##['a','b','c',['d','e','f'],['g','h','i']]
    print(l2)   ##['a','b','c',['d','e','f'],['g','h','i']]
    

    四、深拷贝

    如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化

    import copy
    l1=['a','b','c',['d','e','f']]
    l2=copy.deepcopy(l1)
    l1.append('g')
    print(l1)  ##['a','b','c',['d','e','f'],'g']
    print(l2)  ##['a','b','c',['d','e','f']]
    
    l3.append('g')
    print(l1)   ##['a','b','c',['d','e','f'],'g']
    print(l3)   ##['a','b','c',['d','e','f']]
    

    异常处理

    异常就是会报错

    1、语法异常

    if   #SyntaxError
    0=1  #SyntaxError
    ##语法错误无法捕捉异常
    

    2、逻辑异常

    1/0
    dic={}
    print(dic['sjdfjg'])  #KeyError
    
    try:
        num=input('输入一个值')
        dic={'0':'a'}
        print(dic[num])
        print(3)
        1/int(num)
        print(4)
    except ZeroDivisionError as e:
        print('e:',e)
    except KeyError as e:
        print('e:',e)
    

    重点,以后捕获异常使用这个

    print(1)
    try:
        num=input('输入一个值')
        dic={'0':'a'}
        print(dic[num])
        print(3)
        print(4)
    except Exception as e:
        print('e:',e)
    finally:    ##最终的意思,无论报不报错都会打印
        print(3)
    

    文件的读取

    f=open(test.py)
    ldata=f.read()
    try:
        1/0
        print(data)
        #del f  只删掉了f,变量名,对操作系统的占用不会关闭
    except Exception as e:
        print('e:',e)
    finally:
        f.close()
        ##即删除f的引用,又会命令操作系统关闭对外存文件的占用
    

    基本的文件处理

    什么是文件:操作系统提供给用户的一个虚拟单位

    文件有什么用:存储数据

    打开文件的流程

    1、打开文件路径
    path=r'e:/python/day09/test.py'
    2、双击打开
    f=open(path,'w')
    3、看文件
    data=f.read()
    print(data)
    4、写文件
    f.write('lzs nice')
    5、关闭文件
    f.close()
    #del只删除了文件的引用以及文件在python内存中的占用,但是没有删除对操作系统的占用
    
    
    既然选择了远方,只能风雨兼程
  • 相关阅读:
    php面向对象三大特性
    php面向对象的重写与重载
    一组成对的数字,找出不成对的数字
    如何创建dll以及使用
    常见运行时错误
    连续数的和
    绕圆圈取球
    第一章 概述
    错误2038
    一个简单的环境光shader
  • 原文地址:https://www.cnblogs.com/lzss/p/11340954.html
Copyright © 2011-2022 走看看