深拷贝和浅拷贝python
列表的拷贝,用copy方法浅拷贝,新列表和被拷贝列表的id是不同的。函数
list1 = [1, 'ss', (5, 6), ['p', 'w','M'], {'key1': 'value1', 'key2':'value2'}] print('list1', id(list1)) # list1 1964077175880 list2 = list1.copy() print('list2', id(list2)) # list2 1964333005960
浅拷贝以后,若是在新的列表中改变可变元素,会同步影响被拷贝列表中对应的元素,二者联动编码
若是在新列表中改变不可变元素,新老列表不会同步变化spa
list1 = [1, 'ss', (5, 6), ['p', 'w','M']] print('list1', id(list1)) # list1 2443199403080 list2 = list1.copy() print('list2', id(list2)) # list2 2443455166280 list2[3][1] = 'qqqqqq' # 对list2中第四个元素进行修改 list2[2] = ('x', 'y') print('list1第四个元素id', id(list1[3])) # list1第四个元素id 2443199402568 print('list1第一个元素id', id(list1[0])) # list1第一个元素id 140729573994768 print(list1) # [1, 'ss', (5, 6), ['p', 'qqqqqq', 'M']] print('list2第四个元素id', id(list2[3])) # list2第四个元素id 2443199402568 print('list2第一个元素id', id(list2[0])) # list2第一个元素id 140729573994768 print(list2) # [1, 'ss', ('x', 'y'), ['p', 'qqqqqq', 'M']]
深拷贝须要import copy的包,使用其中的deepcopy函数3d
深拷贝以后,新旧列表毫无瓜葛,就是彻底不相关的两个列表。code
深拷贝以后,列表中可变元素的id不同,不可变元素的id是同样的。对象
import copy list1 = [1, 'ss', (5, 6), ['p', 'w','M']] list2 = copy.deepcopy(list1) print('list1', id(list1)) # list1 1665335972936 print('list2', id(list2)) # list2 1665620498440 list2[3][1] = 'qqqqqq' print(list1) # [1, 'ss', (5, 6), ['p', 'w', 'M']] print(list2) # [1, 'ss', (5, 6), ['p', 'qqqqqq', 'M']] print('list1第四个元素id', id(list1[3])) # list1第四个元素id 1665335972424 print('list2第四个元素id', id(list2[3])) # list2第四个元素id 1665365546952
文件的编码blog
在电脑中执行程序的过程图片
一、硬盘的内容加载到内存内存
二、CPU去内存中取数据,执行程序。
三、执行生成的数据,优先存入内存。
python解释器在计算机中的运行过程
一、python解释器代码由硬盘加载到内存
二、文件从硬盘加载到内存
三、解释器读取文件内容
四、识别python语法,执行操做
ASCII码 一个字节表明一个英文字母
GBK码 两个字节表明一个中文
utf-8码 一个字节表明英文,3个字节表明汉字
utf-8只和Unicode作映射,其余编码必须先转成unicode,才能够转成utf-8
目前,计算机内存中均是Unicode,硬盘中均是utf-8
字节byte,一个字节由8个bit组成。
编码的过程,由字符转为字节流 encode
解码的过程,由字节流转为字符 decode
用什么格式编码,就要用什么格式解码
unicode(内存) ---> 编码encode---> utf-8(硬盘)
utf-8(硬盘)---> 解码decode---> unicode (内存)
打开文件的三种模式
一、 r模式,
只读,若是文件不存在的话会报错
二、w模式
只写,若是文件不存在,则建立一个文件,将内容写入
若是文件存在,则会先将文件里的内容清空,再将内容写进去
三、a模式
若是文件存在,则再内容后面追加内容
若是文件不存在,则建立一个文件,将内容写入
打开文件的语法格式:
with open(r‘带后缀的文件名’,mode=‘打开模式’,encoding='文件的编码格式')as f :
r : 用来转义‘带后缀的文件名’路径中的转义字符
带后缀的文件名 :能够是绝对路径,也能够是相对路径
文件编码格式 : 与打开的文件编码模式一致便可
f :文件对象的建成,便于后面使用
举例说明:
with open(r'RECORD.txt', 'w', encoding='utf-8') as wf: wf.write('AAAAAAA') # AAAAAAA with open(r'RECORD.txt', 'a', encoding='utf-8')as af: af.write('BBBBB') # AAAAAAABBBBB
也能够同时打开两个文本文件,一个只读一个只写
with open(r'RECORD.txt', 'r', encoding='utf-8') as rf, \ #r默认的时rt,读文本文件的 open(r'newRecord.py', 'w', encoding='utf-8')as wf: a = rf.read() # 打开RECORD.txt文件 wf.write(a) # 将RECORD.txt文件写入newRecord.py
打开图片等非文本文件,拷贝的时候不要指定encoding参数。
with open(r'th.jpg', 'rb') as rf, open(r'newPhoto.png', 'wb')as wf: #rb用于读byte文件的 sss = rf.read() wf.write(sss)