深浅拷贝
一、引言
在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内存中的占用,但是没有删除对操作系统的占用
既然选择了远方,只能风雨兼程