CSIC_716_20191107【深拷貝、文件的編碼解碼、文件的打開模式】

深拷貝和淺拷貝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)
相關文章
相關標籤/搜索