目錄
8.4.1 不可變數據類型
8.4.2 可變數據類型
8.4.3 元組與列表的區別
8.4.4 今天彩票沒中獎
8.4.1 不可變數據類型
不可變數據類型是指不可以對該數據類型進行原地修改,即只讀的數據類型。迄今為止學過的不可變數據類型有字符串,元組。
在使用[]操作符對字符串,元組進行修改時,Python會拋出類型錯誤的異常信息,我們可以在交互模式中進行驗證:
>>> content = "static data type"
>>> content[0]=S
Traceback (most recent call last):
?File "<stdin>", line 1, in <module>
NameError: name 'S' is not defined
>>> numbers = (1,2,3,4,5)
>>> numbers[0] = 6
Traceback (most recent call last):
?File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Python解釋器拋出了TypeError的異常信息,TypeError表示類型錯誤的意思。之所以是類型錯誤,很好理解,因為字符串或元組這種類型不支持對元素進行修改。
8.4.2 可變數據類型
與不可變數據類型相對的是可變數據類型,在可變數據類型中,可以對容器中的元素進行修改。列表,以及在后面將要介紹的字典,集合等,都是可變的數據類型。我們同樣可以在交互模式中進行驗證:
>>> numbers = [1,2,3,4,5]
>>> id(numbers)
2749153235976
>>> numbers[0]=6
>>> numbers
[6, 2, 3, 4, 5]
>>> id(numbers)
2749153235976
從交互模式的輸出中可以分析出,可以通過[]操作符列表類型進行修改。修改后的列表與修改前的列表,它們具有相同的id值,說明是同一個列表。
調用內置的id函數可以得到對象的id值,在CPython中,id值即內存地址。
8.4.3 元組與列表的區別
在使用元組的場景中,都可以使用列表來進行代替,那么為什么還要定義元組這種數據類型?在本小節的內容中,通過兩個方面來進行分析:
(1) 元組是靜態,不可變的數據類型
元組與列表的核心區別在于,元組是靜態的,不可變的,列表是動態的, 可變的。我們在定義變量時,如果該對象具備靜態,不可變的語義,應當使用元組,否則應當使用列表。以生活中的購物清單來進行舉例,在購物清單中,我們可以隨時對清單進行修改,比如添加某一個商品,或從購物車中移除某一個商品。購物清單是可修改的,可變的,現在通過Python代碼來進行模擬:
#?__desc__?=?通過Python代碼模擬購物清單的添加和刪除#?定義shopping_list,表示購物清單
shopping_list?=?["消毒液",?"口罩",?"白酒"]#?口罩已經斷貨,從購物車中移除
shopping_list.remove("口罩")
#?shopping_list的輸出為["消毒液",?"白酒"]#?從購物車中添加葵花口服液
shopping_list.append("葵花口服液")
#?shopping_list的輸出為["消毒液",?"白酒",?"葵花口服液"]
一周有七天,從周一到周日,不會再包含其它的時間單位,此時通過元組來定義一周的所有時間,在使用上非常自然:
#?__desc__?=?通過元組來表示一周#?定義變量week,表示一周
week?=?("周一",?"周二",?"周三","周四",?"周五",?"周六","周日")我們同樣可以通過列表來表示一周:
#?__desc__?=?通過列表來表示一周#?定義變量week,表示一周
week?=?["周一",?"周二",?"周三","周四",?"周五",?"周六","周日"]
由于列表是可變的數據類型,所以可以在程序中隨時對列表進行修改:
#?__desc__?=?粗心的程序員添加了個周八
#?定義變量week,表示一周
week?=?["周一",?"周二",?"周三","周四",?"周五",?"周六","周日"]
week.append("周八")
#?week的輸出為["周一",?"周二",?"周三","周四",?"周五",?"周六","周日","周八"]
一周的時間里包含周八,這顯然不符合日常邏輯。而使用元組,可以避免這樣的問題, 一旦對元組進行修改,Python就會拋出類型錯誤的異常信息。
8.4.4 今天彩票沒中獎
跟薯條老師學高級爬蟲(JS逆向+安卓逆向),數據分析,大數據開發,金融量化交易,以及機器學習+深度學習算法。堅定自己的學習目標,保持學習的熱情,那你成為高手只是時間問題。
薯條老師的學生在南方電網,林氏家居,京東,阿里等大廠。想系統學習Python和Java的同學,可以移步薯條老師的個人技術博客:薯條老師的個人技術博客http://www.chipscoco.com/?對本節教程有任何不懂的同學,亦可在評論區中進行評論。薯條老師會詳細解答你們提出的每一個問題。