python中的可變參數和不可變參數

來源:互聯網
上載者:User

標籤:toc   內容   沒有   start   net   引用   lis   元組   支援   

知識點:Python中,萬物皆對象。

   python中不存在所謂的傳值調用,一切傳遞的都是對象的引用,也可以認為是傳址。

一、可變對象和不可變對象

Python在heap中分配的對象分成兩類:可變對象和不可變對象。所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變。

不可變(immutable):int、字串(string)、float、(數值型number)、元組(tuple)

可變(mutable):字典型(dictionary)、列表型(list)

不可變類型特點:

  看下面的例子(例1)

 

[python] view plain copy  print?
  1. i = 73  
  2. i += 2  


從可知,不可變對象的特徵沒有變,變的只是建立了新對象,改變了變數的對象引用。

  看一個例子(例2)

>>>x = 1>>>y = 1>>>x = 1>>> x is yTrue>>>y is zTrue

  如上所示,因為整數為不可變,x,y,z在記憶體中均指向一個值為1的記憶體位址,也就是說,x,y,z均指向的是同一個地址,值得注意的是,整形來說,目前僅支援(-1,100)。

  總結一下,不可變對象的優缺點。

    優點是,這樣可以減少重複的值對記憶體空間的佔用

    缺點呢,如例1所示,我要修改這個變數綁定的值,如果記憶體中沒用存在該值的記憶體塊,那麼必須重新開闢一塊記憶體,把新地址與變數名綁定。而不是修改變數原來指向的記憶體塊的值,這回給執行效率帶來一定的降低。

  下面看一個可變對象的例子(例3)

m=[5,9]m+=[6]

二、函數參數:

Python函數參數對於可變對象,函數內對參數的改變會影響到原始對象;對於不可變對象,函數內對參數的改變不會影響到原始參數。原因在於:

1、可變對象,參數改變的是可變對象,其內容可以被修改。

2、不可變對象,改變的是函數內變數的指向對象。

 

比如存在2個列表 a 和 b

如果a=b的話, a和b的地址是相同的;如果只是想拷貝,那麼就得用 a=b[:]

參考連結:

 

http://www.cnblogs.com/evening/archive/2012/04/11/2442788.html

http://thomaschen2011.iteye.com/blog/1441254




python中的可變參數和不可變參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.