天天看點

Python資料結構前言 軟體環境 Python資料結構樹狀圖 基本資料類型 組合資料類型 最後

系統 

ubuntukylin 14.04

軟體 

python 4.7.6

ipython 4.0.0

基本資料類型 

數值型 

– 整型 

– 浮點型 

– 複數

布爾型

字元型

組合資料類型 

序列 

– 清單 

– 元組 

– 字元串

字典

集合

檔案

自定義類型 

整型int是一種不可變類型

需要注意的是,num = 1、 num = 2 并不是同一個資料對象。第一個num變量儲存着 1 在記憶體中存儲的索引位址,第二個變量num則表示 2 在記憶體中存儲的索引位址。在上面的兩次指派中,1、2 兩個資料對象在記憶體中并沒有改變,改變的隻是 num 變量所指向的記憶體位址。是以說int類型是一種不可變類型,int類型對象在記憶體中并不會發生改變,但可以改變int型對象所對應變量的值。其調用過程為:變量num隻存儲了索引位址,再通過索引找到在記憶體中存儲的int型對象,并最終引用出來。

上面的例子可以看出python中float類型的資料同樣有着存儲限制。

python還支援複數,為math領域的研究提供了非常好的支援。

布爾類型可以直接指派,注意首字母要大寫。

大小寫敏感,可以含有下劃線_ 。

命名慣例: 

a. 盡量不要以’ _ ’ 為首字母 

b. ‘_x_’ 為系統變量,有特殊含義 

c. ‘__x’ 表示類的本地變量,在類中調用(注意:是兩條下劃線’__’) 

d. ‘__x__’ python module的内置方法 

e. ’ _ ’ 存儲着目前最後一個表達式的結果

使用dir( )函數可以顯示python一般對象的内置方法,如下:

而module或函數的__doc__方法可以顯示module或函數的document,以此來認識一個module或函數。而這些document,寫入在python module檔案首部的三引号中”’ “’,同時”’ ”’作為批量輸出的辨別,用于同時輸出多行内容或充當注釋。

1. 整數序列:xrange對象 

2. 字元序列:字元串、buffer(緩沖區)對象、unicode字元串 

3. 對象序列:清單、元組 

其中清單、元組、字元串都是python程式中非常常用的兩種類型。

字元串是一種序列,可以通過索引引用,以字元為機關,屬于不可變類型。當定義一個str對象時,str對象會在記憶體中以ascii碼的格式從索引對象指定的入口位址依次以字元為機關存放起來,其中每一個char都占用1byte(8bit)的存儲空間。 

注:在python中的字元串可以使用 ‘str’ 或者 “str” 括起來,而且兩者沒有任何的差別,隻視乎于那一個使用起來更加友善和更适合使用環境。随便一提’” document ‘”在python中表示文檔,用在代碼行中,有類似注釋的功能,而且’” ‘”中可以使用單引号和雙引号。 

例子(1).

例子(2).

id(variable):查詢變量存儲的索引位址 

type(variable):檢視變量的資料類型 

例子(1)中,顯然同一個name變量在賦與不同的字元串類型值後name變量自身的索引位址發生了改變。 

例子(2)中,将同一個str對象’jmilk‘指派給兩個不同的變量,這兩個變量的值(記憶體中的引用對象)卻是一樣的。 

字元串的切片: 

字元串最為序列的一種,可以使用切片操作符來實作字元串的切片顯示。

(1)stringname[x:y] –>顯示字元串中從第x個索引的字元–第y-1個字元,索引從0開始計算,其中的空格也算一個字元。

(2)當x或y為空時,預設為顯示往前、往後的所有

(3)string[x:y:步進],在上述的基礎上加入步進顯示

從例子(3)中可以看出,步進的作用即将切片後的字元串,從第一次字元開始,往後均已以步進指定的間隔取出字元。

小結:當執行一條指派語句時,生成了兩個記憶體對象。分别如下: 

1). 資料對象:python會将所有的資料對象存放到配置設定的存儲中(一般存放在記憶體中特定的位址塊)。 

2). 引用對象:既是變量,其在記憶體中存放指定的資料對象的索引位址,既資料對象和變量是分别存放的。程式運作時,通過引用對象(變量)來調用出資料對象的值。而且引用對象(變量)是動态類型,可以任意改變引用對象的索引值。 

值得注意的是,python自身帶有垃圾回收的機制,各種對象在不被引用的時候,便自動由垃圾回收器回收。如上述例子(1),在str對象’jmilk‘不被任何引用對象指向時,會被系統回收掉其資源。

元組是不可變對象,使用tuplename = (parameters)建立。

使用id( )方法,顯然兩個number引用對象的索引是不一緻的。而且在定義tuple對象後,就可以使用tuple對像的一些内置方法: 

首先使用dir( )來擷取tuple類型對象number的多有内置方法

或者也可以使用内置函數help(object)來擷取一個對象詳細的幫助文檔

會得到所有對象内置函數的使用格式和方法,如下:

例如可以使用__add__方法來連接配接兩個tuple對象

使用__eq__來判斷兩個tuple對象是否一緻

使用__contains__來判斷tuple對象是否包含一個元素

總而言之,善于使用help( )、doc()、__doc__等方法可以很好的幫助我們更加充分的認識python這門語言,也可以非常的便于我們程式的編寫。

清單是可變對象,使用listname = [parameters]建立。是任意對象的有序集合,通過索引通路其中的元素,可以任意的嵌套、伸長、異構(不同的資料類型,同時存放在一個list中,支援原處修改内部元素的引用。如果說元組類似于一進制數組,那清單就相當于二進制數組的效果。

從上面的例子可以看出,即便在testlistone對象中插入元素’4’後,testlistone與testlisttwo的位址仍然是一緻的,即在改變testlistone對象的值後,沒有建立出一個新的記憶體對象,這是有别于不可變對象的。 

值得注意的是,隻有使用了list類型對象内置的append、extend、remove、insert等方法的時候才會在原有的記憶體對象的基礎上作出修改。不可以直接使用下述的方法來直接修改一個list對象的value。

直接修改list對象的value,會産生一個新的記憶體對象。 

注:list類型的對象本質是在清單變量的引用對象指向的位址空間中存放了清單中的元素的存儲索引位址。而這種可以包含其他對象的引用的對象也稱為容器。是以list類型雖然是可變的,但是list的元素本身不一定是可變的。因為list作為一個組合資料類型對象其可以實作對象的嵌套,list中的元素可以是string、tuple等不可變的類型,也可以是dic、list等可變類型的嵌套。

小結: 

1. 不可變對象:int、float、string、tuple 對一個不可變類型的變量賦以新的值,會改變變量引用對象的索引值,使引用對象新的索引指向新的記憶體對象。原有的記憶體對象不會發生改變,但若不再被引用對象引用時,會自動的被垃圾回收機制回收。 

2. 可變對象:list、distionary 對一個可變類型的變量賦以新的值,會直接在變量引用對象指向的記憶體空間中存放新的value,而不會重新開辟新的空間存放新的值。

字典是python特有的一種資料結構,其不是以下标的索引來查詢資料,而是使用key:value的鍵值對來實作變量和資料的映射,是以字典也被稱之為映射資料類型。字典使用dictname = {key1:vlalue1,key2:value2,…}建立。字典資料類型,使得python程式具有了更好的靈活性,因為其鍵值對的設計,很好的兼用了josn、nosql等主流資料處理技術。 

建立一個字典:

顯示字典中的元素:

分别顯示字典中的keys或values

在字典中加入key:value

将字典中的一對key:value彈出(删除)

當然,字典類型的對象還有許多使用的内置方法,建議使用help(dictname)取詳細的了解一個字典類型的對象所能實作的功能。

掌握python資料結構是編寫python程式的基本要求,當然pyehon的資料結構的内容遠比上述的要豐富許多。在以後的博文中我們更加詳細 

深入的去學習每一個資料類型的具體實作和功能。 

jmilk