python基礎補充

來源:互聯網
上載者:User

標籤:

關於模組匯入方式:

  import  random

  print random.choice(range(10))

  from  random import choice

  print choice(range(10))

第一種方法:將模組的名字設定為一個隱含在名字空間裡的全域變數,這樣就好像訪問全域屬性那樣訪問choice函數;

第二種方法:直接把choice引入到全域名字空間裡來(而非模組的名字),因此不再需要把這個屬性當初模組的成員,實際上我們也只是擁有這個屬性而已;

python中存在的誤解:以為第二種方法只匯入了個函數,而沒有匯入整個模組,這個不對的;整個模組已經被匯入了,但是只有那個函數的引用被儲存下來,所有;from-import

這種文法並不能帶來效能上的差異,也沒有節省記憶體一說;

能不能重複匯入模組:

  很多人擔憂的一個問題是有兩個模組m.py 和n.py都匯入了foo.py模組,當m匯入n時,foo豈不是被匯入了兩次?簡單的說,當python碰到一個已經載入的模組又被匯入時,

它會跳過載入的過程,所以無需擔心額外消耗記憶體的問題;

python是“傳引用的“ 還是”傳值的“:

  這個問題不能簡單的使用是或者不是來回答,只能說看情況而定-----有的對象在傳入函數時是傳引用,而有些則是被複製進來,即傳值;判斷的依據就是看對象的可改變性

(mutability),而這一點取決於對象的類型;python程式員通常不用“傳值”還是“傳引用“這種說法,取而代之的是對象是可變的(mutable)還是不可變的(immutable)。
   簡單的類型或者“標量”類型,包括整數或其他數字類型,str 和 unicode這樣的字串類型,以及元組都是不可變的;

   列表、字典、類、類執行個體等都是可變的;

執行個體:

 1 >>> mylist = [1, ‘a‘ , [‘223‘, ‘bar‘] 2 ... ] 3 >>> mylist2 = list(mylist) 4 >>> mylist2[0] = 2 5 >>> mylist2[2][0] = ‘zzz‘    #修改列表的第一個元素 6 >>> print mylist 7 [1, ‘a‘, [‘zzz‘, ‘bar‘]] 8 >>> print mylist2 9 [2, ‘a‘, [‘zzz‘, ‘bar‘]]10 >>> 

總結:不可變對象(整數等)真正的被複製, 可變對象只是複製了一個對它們的引用,即在記憶體中只有一份對象,而有兩份引用;

這就涉及到一個 ”深拷貝“ 的問題

 

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.