Python的資料模型-對象,值和類型__Python

來源:互聯網
上載者:User

      在Python中,一切資料都是對象,或者和對象有關.(代碼也可以看作是對象).

      每個對象都有一個標識,一個類型,一個值.標識我們可以理解成記憶體位址.對象一建立,標識就不能變了."is"用來比較兩個對象的標識,id()這個函數取對象標識-一個整數,其實就是記憶體位址.

      對象的類型也不能變,用來檢測對象支援的操作.同時也定義的此種類型的對象的可能的值.type()這個函數返回對象的類型,(類型本身也是一個對象).

      對象的值有可變的和不可變的兩種,也就有了可變對象和不可變對象兩種.英文分別是mutable和immutable, 對象不可變(immutable)和值不可變(unchangeable value)是不同的. 這個比較繞,看原文比較好理解,原文是(The value of an immutable container object that contains a reference to a mutable object can change when the latter's value is changed; however the container is still considered immutable, because the collection of objects it contains cannot be changed. So, immutability is not strictly the same as having an unchangeable value, it is more subtle.).或者這麼說,包容器(container)是不可變對象,假設它包含了可變的對象引用,那麼當它包含的對象的值變化的時候,包容器的值也變化了,但是這個時候,我們說包容器仍然是不可變的,因為它所包含的對象集合是不可變的.對象的可變性是由它的類型所決定的.比如,數值,字串和元組是不可變的,但是字典和列表是可變的.

      Python和Java一樣,有記憶體回收機制.對於Python的記憶體回收,我們需要注意下面的情況.在Python庫參考裡面有迴圈回收的詳細控制情況.在使用了跟蹤和調試工具時,一些本來應該回收的對象可能沒有被回收,另外在"try...except"語句裡面也有這種情況.

      另外,對於一些包含了"外部"資源的對象,比如檔案和視窗,最好用"try...finally"來顯示的釋放這些資源.一般是close()這個方法.

      下面我們來看一下容器(containers),這種對象包含了其他對象的引用.比如,元組,列表和字典.大部分情況,當我們說容器的值的時候就是指這個指本身(對象的引用也是值的一部分),而不是包含的對象.當我們討論容器物件的可變性的時候,就只是說被包含對象的標識了.因此,如果一個不可變對象(如元組)包含了一個可變對象, 那麼只要這個可變對象的值變了則它的值就也改變了.

      對於對象的類型,它對對象的行為有很大的影響,甚至對對象的標識也有影響.對於不可變對象(immutable),計算新值的運算子可能實際上返回的是一個已經存在的,具有相同類型和值的對象的引用,對於可變對象(mutable),這個是不允許的.例如"a=1;b=1",a和b可能指向同一個值為1的對象.(也可能不是,這個依賴具體的實現),但是對於"c=[];d=[]",可以確定的是,c和d儲存了兩個不同的,獨立的,新建立的空列表.  (需要注意的是對於c=d=[]這種寫法,c和d儲存的是相同的一個對象).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.