Python-共用引用

來源:互聯網
上載者:User

標籤:family   float   列表   集合   地址   代碼   一個   bsp   字串   

 A會改變嗎?

下面三小段代碼,A的值都會改變嗎?

>>> A = "spam">>> B = A>>> B = "shrubbery"

 

>>> A = ["spam"]>>> B = A>>> B[0] = "shrubbery"

 

>>> A = ["spam"]>>> B = A[:]>>> B[0] = "shrubbery"

 

 分析:

“python中一切都是對象”

整數也好,字串也罷,都是對象。這裡,字串"spam"、列表["spam"]、字串"shrubbery"都是對象,而A和B則是這裡對象的引用,引用可以理解成對這個對象的地址,或者這個對象的名字。

對象又分為可變對象和不可變對象:

  • 不可變對象,該對象所指向的記憶體中的值不能被改變。當改變某個變數時候,由於其所指的值不能被改變,相當於把原來的值複製一份後再改變,這會開闢一個新的地址,變數再指向這個新的地址。
  • 可變對象,該對象所指向的記憶體中的值可以被改變。變數(準確的說是引用)改變後,實際上是其所指的值直接發生改變,並沒有發生複製行為,也沒有開闢新的出地址,通俗點說就是原地改變

Python中,數實值型別(intfloat)、字串str、元組tuple都是不可變類型。而列表list、字典dict、集合set是可變類型。


OK,有了上面的認識,我們就可以擼開袖子分析了。

工欲善其事,必先利其器。一個函數可以幫我們分析A和B是否引用的同一個對象--id(),id()函數用於擷取對象的記憶體位址

 

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.