python中的拷貝與引用

與傳入普通變量不同,當(dāng)在python的函數(shù)參數(shù)中傳入列表時(shí)婆殿,傳入的是列表的引用,也就是說罩扇,如果在函數(shù)內(nèi)部改變了傳入的列表婆芦,則當(dāng)函數(shù)調(diào)用后,該列表也隨之改變了喂饥。舉個(gè)栗子:

定義一個(gè)參數(shù)為列表的函數(shù):

def f(x):
    x.append(1)
    return x

調(diào)用該函數(shù):

>>> x = [1,2]
>>> f(x)
[1, 2, 3]
>>> x
[1, 2, 3]

可知在函數(shù)調(diào)用完成后消约,傳入的列表x也隨之改變了。如果我們不想讓函數(shù)調(diào)用后改變x的值员帮,可以用拷貝功能或粮。

1.列表的拷貝與引用

在python3中,可以用列表的copy方法索引全部元素來完成拷貝捞高;而在python2中氯材,只能用索引全部元素來完成拷貝。

>>> testList = [1,2,3]
>>> check1 = testList  #把列表的引用賦給check1
>>> check2 = testList[:]  #把列表的拷貝賦給check2
>>> testList.append(4)  #改變?cè)斜?>>> print(check1, check2)  #可知check1改變了硝岗,而check2不受影響
[1, 2, 3, 4] [1, 2, 3]

注:在python3中氢哮,除了像上面代碼中那樣引用,還能通過列表的copy方法來引用型檀,即:

check3 = testList.copy()

可用下圖來表示拷貝和引用的原理:


圖糙理不糙

我們定義了一個(gè)列表[1,2,3]冗尤,起名叫testList。列表的引用就是給它再起個(gè)名字叫做check1胀溺,雖然名字不一樣生闲,但指向的都是同一個(gè)變量,在內(nèi)存中都是同一個(gè)位置月幌。

拷貝就是在內(nèi)存中另一個(gè)位置拷貝此列表,起名叫check2悬蔽。雖然兩個(gè)變量的值都是[1,2,3]扯躺,但它們的地址卻是不同的。

除了列表蝎困,字典录语、集合和numpy庫中的matrix、array數(shù)據(jù)結(jié)構(gòu)都有拷貝和引用禾乘。與python3中的列表類型澎埠,它們也都有copy方法。

2.字典的拷貝與引用

>>> testDict = {'age':20, 'name':'Tom'}
>>> check1 = testDict  #賦值testDict的引用
>>> check2 = testDict.copy()  #賦值testDict的拷貝

>>> testDict['age'] = 30
>>> print(check1, check2)
{'age': 30, 'name': 'Tom'} {'age': 20, 'name': 'Tom'}

3.集合的拷貝與引用

>>> testSet = set([1,2])
>>> check1 = testSet  #賦值testSet 的引用
>>> check2 = testSet.copy()  #賦值testSet 的拷貝

>>> testSet.add(3)
>>> print(check1, check2)
(set([1, 2, 3]), set([1, 2]))

4.array的拷貝與引用

>>> from numpy import *
>>> testArray = array([[1,2],[3,4]])
>>> check1 = testArray  #賦值testArray 的引用
>>> check2 = testArray.copy()  #賦值testArray 的拷貝

>>> testArray[0,0] = 100
>>> print check1
[[100   2]
 [  3   4]]
>>> print(check2)
[[1 2]
 [3 4]]

5.matrix的拷貝與引用

拷貝與引用的用法與array相同始藕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒲稳,一起剝皮案震驚了整個(gè)濱河市氮趋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌江耀,老刑警劉巖剩胁,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祥国,居然都是意外死亡昵观,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門舌稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啊犬,“玉大人,你說我怎么就攤上這事壁查【踔粒” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵潮罪,是天一觀的道長康谆。 經(jīng)常有香客問我,道長嫉到,這世上最難降的妖魔是什么沃暗? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮何恶,結(jié)果婚禮上孽锥,老公的妹妹穿的比我還像新娘。我一直安慰自己细层,他們只是感情好惜辑,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疫赎,像睡著了一般盛撑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧搞,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天抵卫,我揣著相機(jī)與錄音,去河邊找鬼胎撇。 笑死介粘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晚树。 我是一名探鬼主播姻采,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爵憎!你這毒婦竟也來了慨亲?” 一聲冷哼從身側(cè)響起婚瓜,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巡雨,沒想到半個(gè)月后闰渔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铐望,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年冈涧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片正蛙。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡督弓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乒验,到底是詐尸還是另有隱情愚隧,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布锻全,位于F島的核電站狂塘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳄厌。R本人自食惡果不足惜荞胡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望了嚎。 院中可真熱鬧泪漂,春花似錦、人聲如沸歪泳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呐伞。三九已至敌卓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伶氢,已是汗流浹背假哎。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞍历,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓肪虎,卻偏偏與公主長得像劣砍,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扇救,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,523評(píng)論 1 51
  • 307刑枝、setValue:forKey和setObject:forKey的區(qū)別是什么香嗓? 答:1, setObjec...
    AlanGe閱讀 1,554評(píng)論 0 1
  • 客戶端告知服務(wù)器端需要HTTP重定向。此方法只會(huì)在default session或者ephemeral sessi...
    Crazy2015閱讀 1,233評(píng)論 0 0
  • 第一天把毛毛留在家里装畅,早早的洗澡睡覺了靠娱,就算哭著睡著的,起碼他沒受傷掠兄。今天很不好像云,這個(gè)點(diǎn)才把娃接回家,舌頭上...
    逃避現(xiàn)實(shí)閱讀 193評(píng)論 0 0