標籤:
關於模組匯入方式:
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基礎補充