1. 基本對象類型(python里面一切皆是對象)
(接前文)
1.6 元組
? 不可變的列表被稱為元組,區別是用小括號包含。元組的元素不能修改,但可以對整個元組進行重新賦值。
? 元組也是序列,因此對元組的遍歷、讀取某個元素、切片等操作,和列表、和字符串相同。
? 特別提醒:若元組中只有一個元素時,元素后面需要加一個半角的英文逗號。
示例:
>>> a = (3) #沒有逗號
>>> type(a) #輸出<class 'int'>,不是tuple類型
>>> a = (3,) #元組
>>> type(a) #輸出<class 'tuple'>,是tuple類型
1.7 字典
1.7.1 字典定義
? 字典是一系列鍵值對。每個鍵都與一個值相關聯,可以使用鍵來訪問與之相關聯的值。鍵和值之間用冒號分隔,而鍵值對之間用逗號分隔。與鍵相關聯的值可以是數字、字符串、列表乃至字典。事實上,可將任何Python對象用作字典中的值。
? 字典用放在花括號{} 中的一系列鍵值對表示。
? 鍵必須是唯一的,不允許重復的鍵。值可以重復。
? 值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組,可變類型如列表不可以作為鍵。示例:
>>> d = {1:'a',2:'b',(3,4):'c'}? #有效的字典定義,元組可以作為鍵
>>> d = {1:'a',2:'b',[3,4]:'c'}? #錯誤的字典定義,列表不能作為鍵
? 字典是一種動態結構,可隨時在其中添加鍵值對。
? 字典中各個鍵值對無次序關系。
1.7.2 訪問及修改字典
1.7.2.1 訪問字典中的值
要獲取與鍵相關聯的值,可指定字典名和放在方括號內的鍵。示例:
>>>d1 = {'name': 'xiaoming', 'age': 15}
>>>d1['age'] #輸出15
>>>d1['sex']? #系統拋出異常,可以采用get()方法。
1.7.2.2 添加鍵值對
要添加鍵值對,可依次指定字典名、用方括號括起的鍵和相關聯的值。示例:
>>> d1['hobby']=['swiming','reading','football']
>>> d1? 輸出:{'name': 'xiaoming', 'age': 15, 'hobby': ['swiming', 'reading', 'football']}
1.7.2.3 修改字典中的值
與新增鍵值對格式相同。示例:
>>> d1['hobby']=['swiming','reading']? #修改鍵'hobby'對應的值,原來為 ['swiming', 'reading', 'football']}
>>> d1 #輸出 {'name': 'xiaoming', 'age': 15, 'hobby': ['swiming', 'reading']}
1.7.2.4 刪除鍵值對
使用del 語句指定字典名和要刪除的鍵,將相應的鍵—值對徹底刪除。示例:
>>> del d1['age']? #刪除鍵為'age'的鍵值對
>>> d1? #輸出{'name': 'xiaoming', 'hobby': ['swiming', 'reading']}
>>> del d1? #刪除字典
1.7.3 字典復制三種方式 (賦值引用、copy、deepcopy)
1) 賦值引用
>>> dict1 = {'Name': 'xiaoming', 'Age': 7, 'Class': 'First'}
>>> dict2 = dict1? #賦值引用,數據只有一份
>>> id(dict1)? #存放數據的內存地址50401344
>>> id(dict2) #內存地址 50401344未變,指向同一份數據
2) copy(淺拷貝)
二份數據。對簡單數據類型的元素會復制數據,復雜數據類型的元素只復制地址引用。
語法、使用方式已經功能與列表的copy相同。示例:
>>> dict1 = {'Name': 'xiaoming', 'Age': 7, 'Class': 'First'}
>>> dict2 = dict1.copy()
3) deepcopy(深拷貝)
使用方法與列表的深拷貝相同。
復制所有數據,包括簡單數據類型元素和復雜數據類型元素。使用方法與列表的深拷貝相同。示例:
>>> dict2 = copy.deepcopy(dict1)