python import和from import

import和from import都是將其他模塊導(dǎo)入當(dāng)前模塊中摹菠。
剛開始一直以為import和from import唯一的區(qū)別操刀,就是from import可以少寫一些模塊名乒验。雖然from XX import 會(huì)污染當(dāng)前名字空間俄认,但似乎僅限如此往毡。
但其實(shí)from import還有一個(gè)相當(dāng)嚴(yán)重的陷阱蒙揣。
舉例來說:

#a.py
test = 2
print 'in a'
#b.py
from a import *
print test
test = 3
from c import *
print test
#c.py
from a import *
print test
test = 4

結(jié)果為:

python b.py
in a
2
2
4

如果將代碼修改如下:

#a.py
test = 2
print 'in a'
#b.py
import a
print a.test
a.test = 3
import c
print c.a.test
#c.py
import a
print a.test
a.test = 4

結(jié)果為:

python b.py
in a
2
3
4

如果,我們把a(bǔ).py中的test = 2修改為 test = [2]开瞭,后面對(duì)test的修改改為對(duì)test[0]的修改懒震,則會(huì)發(fā)現(xiàn),import和from import的結(jié)果完全一致嗤详。

通過以上的分析个扰。基本可以得到這樣的結(jié)論:
1 重復(fù)import或from import多次都只會(huì)作用一次
2 import和from import的作用機(jī)制完全不同
3 import的機(jī)制是將目標(biāo)模塊中的對(duì)象完整的引入當(dāng)前模塊葱色,但并不引入新的變量名
4 from import的機(jī)制則是通過引入新的變量名的形式递宅,將目標(biāo)模塊的對(duì)象的引用拷貝到新的變量名下的方式引入當(dāng)前模塊

這樣描述可能有點(diǎn)抽象,根據(jù)上面的例子來說就是:
1 當(dāng)使用import時(shí)苍狰,只存在一個(gè)名為a.test變量办龄,且只有這一個(gè),無論是在b模塊舞痰,還是c模塊中
2 當(dāng)使用from import時(shí)土榴,在b模塊中,存在一個(gè)新的變量b.test响牛,開始時(shí)玷禽,b.test = a.test(它們共同指向同一個(gè)對(duì)象)赫段,當(dāng)發(fā)生賦值時(shí),b.test指向了一個(gè)新的對(duì)象矢赁,但a.test仍指向原來的對(duì)象糯笙。
具體來說就是:
(1) 初始時(shí),在a中存在a.test變量撩银,它指向一個(gè)整數(shù)對(duì)象‘2’
(2) 在執(zhí)行b.py時(shí)给涕,from a import * 的執(zhí)行,相當(dāng)于引入了一個(gè)新的變量名b.test额获,b.test = a.test够庙,這時(shí),b.test和a.test都指向整數(shù)對(duì)象‘2’
(3) 之后的賦值操作(test = 3)抄邀,使得b.test = 3耘眨,使得b.test指向了整數(shù)對(duì)象'3',而a.test仍指向整數(shù)對(duì)象'2'
(4) 繼續(xù)執(zhí)行from c import * 時(shí)境肾,進(jìn)入c.py剔难,在c模塊中,執(zhí)行from a import *奥喻,將引入新的變量名c.test偶宫,c.test = a.test,它們都指向整數(shù)對(duì)象'2'环鲤,之后的賦值操作(test = 4),使得c.test = 4纯趋,現(xiàn)在,c.test指向了整數(shù)對(duì)象'4'楔绞,而a.test仍指向整數(shù)對(duì)象'2'
(5) 回到b.py结闸,由于b.test已存在唇兑,因此酒朵,不引人新的變量,而是直接執(zhí)行b.test = c.test扎附,這時(shí)蔫耽,b.test指向整數(shù)對(duì)象'4'
最終的結(jié)果,a.test指向'2'留夜,b.test指向'4'匙铡,c.test指向'4'
3 當(dāng)test變?yōu)閘ist時(shí),b.test[0]的修改碍粥,并沒有引起b.test本身的變化鳖眼,換言之,b.test和a.test仍指向同一個(gè)對(duì)象嚼摩,只不過這個(gè)對(duì)象內(nèi)部被修改了

總結(jié):
1 from import很危險(xiǎn)钦讳,如果不了解其作用機(jī)制矿瘦,慎用
2 即便知道了機(jī)制,一樣要慎用
(原時(shí)間2015-03-03)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愿卒,一起剝皮案震驚了整個(gè)濱河市缚去,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琼开,老刑警劉巖易结,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柜候,居然都是意外死亡搞动,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渣刷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滋尉,“玉大人,你說我怎么就攤上這事飞主∈ㄏВ” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵碌识,是天一觀的道長碾篡。 經(jīng)常有香客問我,道長筏餐,這世上最難降的妖魔是什么开泽? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮魁瞪,結(jié)果婚禮上穆律,老公的妹妹穿的比我還像新娘。我一直安慰自己导俘,他們只是感情好峦耘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旅薄,像睡著了一般辅髓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上少梁,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天洛口,我揣著相機(jī)與錄音,去河邊找鬼凯沪。 笑死第焰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妨马。 我是一名探鬼主播挺举,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼而叼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了豹悬?” 一聲冷哼從身側(cè)響起葵陵,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞻佛,沒想到半個(gè)月后脱篙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伤柄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年绊困,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片适刀。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秤朗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笔喉,到底是詐尸還是另有隱情取视,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布常挚,位于F島的核電站作谭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奄毡。R本人自食惡果不足惜折欠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吼过。 院中可真熱鬧锐秦,春花似錦、人聲如沸盗忱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽售淡。三九已至斤葱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揖闸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工料身, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汤纸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓芹血,卻偏偏與公主長得像贮泞,于是被迫代替她去往敵國和親楞慈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • python import 和from import 區(qū)別啃擦,以及在mock中的應(yīng)用 前言 寫python肯定會(huì)使用...
    茫子閱讀 3,551評(píng)論 0 1
  • 1.埋點(diǎn)是做什么的 2.如何進(jìn)行埋點(diǎn) 3.埋點(diǎn)方案的設(shè)計(jì) 近期常被問到這個(gè)問題囊蓝,我擔(dān)心我的答案會(huì)將一些天真爛漫的孩...
    lxg閱讀 2,018評(píng)論 0 1
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個(gè)如下例子,分析運(yùn)行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,067評(píng)論 0 15
  • 愛情這件事,總是讓人摸不著頭腦珠叔。你永遠(yuǎn)不知道它什么時(shí)候會(huì)來蝎宇,但它又隨時(shí)可能會(huì)出現(xiàn)。 有些人雖然喜歡你祷安,但不一定會(huì)說...
    小熊敘情閱讀 700評(píng)論 0 1
  • 1姥芥、父類實(shí)現(xiàn)深拷貝時(shí),子類如何實(shí)現(xiàn)深度拷貝汇鞭。父類沒有實(shí)現(xiàn)深拷貝時(shí)凉唐,子類如何實(shí)現(xiàn)深度拷貝。 深拷貝同淺拷貝的區(qū)別:淺...
    Mr丶炎閱讀 103評(píng)論 2 0