国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python中函數(shù)參數(shù)引用之傳值/傳址和copy/deepcopy

這篇具有很好參考價值的文章主要介紹了python中函數(shù)參數(shù)引用之傳值/傳址和copy/deepcopy。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.傳值和傳址的區(qū)別

傳值就是傳入一個參數(shù)的值,傳址就是傳入一個參數(shù)的地址,也就是內(nèi)存的地址(相當于指針)。他們的區(qū)別是如果函數(shù)里面對傳入的參數(shù)重新賦值,函數(shù)外的全局變量是否相應改變,用傳值傳入的參數(shù)是不會改變的,用傳址傳入就會改變。

a=1
def f(b):
    b=2
f(a)
print (a)

例如這段代碼里面,首先聲明a的值為1,把a作為參數(shù)傳入到函數(shù)f里面,函數(shù)f里面對b重新賦值為2,如果是傳值的形式傳入a的話,a的值是不會變的,依然為1,如果以傳址的形式(但是這個不是程序員能決定的)傳入a,a就會變成2。這個就是傳值和傳址的區(qū)別。

2. Python中的傳址和傳值是怎樣的呢?

Python是不允許程序員選擇采用傳值還是傳址的。Python參數(shù)傳遞采用的肯定是“傳對象引用”的方式。實際上,這種方式相當于傳值和傳址的一種綜合。

如果函數(shù)收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值——相當于傳址。如果函數(shù)收到的是一個不可變對象(比如數(shù)字、字符或者元組)的引用(其實也是對象地址?。。。?,就不能直接修改原始對象——相當于傳值。

所以python的傳值和傳址是根據(jù)傳入?yún)?shù)的類型來選擇的

傳值的參數(shù)類型:數(shù)字,字符串,元組(immutable)

傳址的參數(shù)類型:列表,字典(mutable)

a=1
def f(a):
    a+=1
f(a)
print (a)

這段代碼里面,因為a是數(shù)字類型,所以是傳值的方式,a的值并不會變,輸出為1

a=[1]
def f(a):
    a[0]+=1
f(a)
print (a)

這段代碼里面,因為a的類型是列表,所以是傳址的形式,a[0]的值會改變,輸出為[2]

3. copy和deepcopy

不止是函數(shù)里面,函數(shù)外面的引用也同樣遵循這個規(guī)則:

import copy

a=[1,2,3]
b=a
a.append(4)
print a,b

a=[1,2,3]
b=copy.copy(a)
a.append(4)
print (a,b)

第一個輸出為2,1,第二個輸出為 [2] [2]

b=a

所以在python中,當運行上面的代碼時,如果a是字典或者列表的話,程序執(zhí)行的操作并不是新建一個b變量,然后a的值復制給b,而是新建一個b變量,把b的值指向a,也就是相當于在c語言里面的新建一個指向a的指針。
所以當a的值發(fā)生改變時,b的值會相應改變。

但是,當我們想新建一個與a的值相等的b變量,同時b的值與a的值沒有關聯(lián)時,要怎么做?這時就用到copy與deepcopy了

import copy

a=[1,2,3]
b=a
a.append(4)
print (a,b)

a=[1,2,3]
b=copy.copy(a)
a.append(4)
print (a,b)

上面的輸出為:

[1, 2, 3, 4] [1, 2, 3, 4]
[1, 2, 3, 4] [1, 2, 3]

這里用了copy來讓b與a相等,后面如果修改了a的值,b的值并不會改變。看來copy已經(jīng)可以實現(xiàn)我們上面的提到的需求了,那么deepcopy又有什么用?

如果我們遇到這種情況,copy就解決不了了

a=[1,[1,2],3]
b=copy.copy(a)
a[1].append(4)
print(a,b)

這里輸出的結(jié)果為:[1, [1, 2, 4], 3] [1, [1, 2, 4], 3] ,這樣的結(jié)果明顯不是我們想要的

當列表或字典參數(shù)里面的值是列表或字典時,copy并不會復制參數(shù)里面的列表或字典,這時就要用到deepcopy了

#學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流群:711312441
 a=[1,[1,2],3]
 b=copy.deepcopy(a)
 a[1].append(4)
 print (a,b)

輸出的結(jié)果為:[1, [1, 2, 4], 3] [1, [1, 2], 3]文章來源地址http://www.zghlxwxcb.cn/news/detail-749642.html

到了這里,關于python中函數(shù)參數(shù)引用之傳值/傳址和copy/deepcopy的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 第5章 函數(shù)式編程**-函數(shù)和方法,高階函數(shù),匿名函數(shù),函數(shù)柯里化,閉包,遞歸,控制抽象(傳值參數(shù),傳名參數(shù)),惰性加載...

    第5章 函數(shù)式編程**-函數(shù)和方法,高階函數(shù),匿名函數(shù),函數(shù)柯里化,閉包,遞歸,控制抽象(傳值參數(shù),傳名參數(shù)),惰性加載...

    1)面向?qū)ο缶幊?解決問題,分解對象,行為,屬性,然后通過對象的關系以及行為的調(diào)用來解決問題。 對象:用戶 行為:登錄、連接 JDBC、讀取數(shù)據(jù)庫 屬性:用戶名、密碼 Scala 語言是一個完全面向?qū)ο缶幊陶Z言。萬物皆對象 對象的本質(zhì):對數(shù)據(jù)和行為的一個封裝 2)函數(shù)式編

    2023年04月10日
    瀏覽(23)
  • 【C++】C++ 引用詳解 ① ( 變量的本質(zhì) - 引入 “ 引用 “ 概念 | 引用語法簡介 | 引用做函數(shù)參數(shù) | 復雜類型引用做函數(shù)參數(shù) )

    【C++】C++ 引用詳解 ① ( 變量的本質(zhì) - 引入 “ 引用 “ 概念 | 引用語法簡介 | 引用做函數(shù)參數(shù) | 復雜類型引用做函數(shù)參數(shù) )

    \\\" 引用 \\\" 語法 是 C++ 語言中 特有的 , 在 C 語言中是沒有 引用 這個概念的 ; 分析 引用 之前 , 先回顧下 變量 : 在 【C 語言】變量本質(zhì) ( 變量概念 | 變量本質(zhì) - 內(nèi)存空間別名 | 變量存儲位置 - 代碼區(qū) | 變量三要素 ) 博客中 , 介紹了變量的本質(zhì) : 變量 的本質(zhì)是 內(nèi)存空間 的 \\\" 別名

    2024年02月11日
    瀏覽(37)
  • C++:命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)

    C++:命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)

    個人主頁 : 個人主頁 個人專欄 : 《數(shù)據(jù)結(jié)構(gòu)》 《C語言》《C++》 本篇博客作為C++知識總結(jié),我們來認識命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù)。 那么在介紹命名空間時,我們先用C++的方式打印\\\"hello world\\\"。 其中,using namespace std; 就是一種命名空間的使用。 在

    2024年02月11日
    瀏覽(26)
  • C++的引用變量作為函數(shù)參數(shù)

    C++的引用變量作為函數(shù)參數(shù)

    在C++的中新增一個特性:按引用傳遞變量,雖然與按傳遞變量的地址可以實現(xiàn)相同的結(jié)果,但引用有其獨特的地方。 引用傳遞: 引用經(jīng)常被用作函數(shù)參數(shù),使得函數(shù)中的變量名成為調(diào)用程序中的變量的別名。 通過引用變量用作參數(shù),函數(shù)將使用原始數(shù)據(jù),而不是其副本。 舉

    2023年04月14日
    瀏覽(20)
  • 【C++起飛之路】初級——缺省參數(shù)、函數(shù)重載、引用

    【C++起飛之路】初級——缺省參數(shù)、函數(shù)重載、引用

    缺省參數(shù)是 聲明 或 定義 函數(shù)時為 函數(shù)的參數(shù)指定一個缺省值 。 在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。 缺省參數(shù)使用主要規(guī)則:調(diào)用時你只能從最后一個參數(shù)開始進行省略,換句話說,如果你要省略一個參數(shù),你必須省略它后

    2024年02月04日
    瀏覽(22)
  • C++之入門之缺省參數(shù)&&函數(shù)重載&&引用

    C++之入門之缺省參數(shù)&&函數(shù)重載&&引用

    重新拿起曾經(jīng)尚未填的C++的坑,從現(xiàn)在我會繼續(xù)更新C++的相關內(nèi)容,希望各位能夠支持 缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實 參則采用該形參的缺省值,否則使用指定的實參 (1)全缺省參數(shù) (2)半缺省參數(shù) (1)半

    2023年04月15日
    瀏覽(23)
  • 使用指針或引用作為函數(shù)參數(shù)的編程技巧

    空指針檢查: 使用指針允許在函數(shù)內(nèi)部檢查傳遞的指針是否為 nullptr 。這使得在函數(shù)內(nèi)部能夠處理空指針的情況,增加代碼的健壯性。如果使用引用,無法表示空值,而使用指針則可以通過傳遞 nullptr 來表示缺失的數(shù)據(jù)。

    2024年02月16日
    瀏覽(21)
  • Python shutil copy(),copyfile() 和 copytree()函數(shù)

    最近在處理數(shù)據(jù)集,經(jīng)常會使用shutil相關函數(shù)處理文件,今天專門觀察了下copy(),copyfile() 和 copytree() 之間的差別。 移動具體文件 source只能是文件, destination可以是文件,也可以是目錄 ,目錄必須已經(jīng)創(chuàng)建,所以在復制文件前需要 移動具體文件 source和destination都只能是文件

    2024年02月11日
    瀏覽(14)
  • 【C++入門 三】學習C++缺省參數(shù) | 函數(shù)重載 | 引用

    【C++入門 三】學習C++缺省參數(shù) | 函數(shù)重載 | 引用

    缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。 ①全缺省參數(shù) ②半缺省參數(shù) 注意: 1. 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給 2. 缺省參數(shù)不能在函數(shù)聲明和定義中

    2024年02月06日
    瀏覽(24)
  • python函數(shù)外變量傳到函數(shù)內(nèi)處理后不改變函數(shù)外的變量,copy模塊使用

    先上代碼 這段代碼先指定了一個a變量是個list,又寫了一個abc函數(shù),功能是把外面?zhèn)鬟M來的list里面的1這個值去掉 按理說在函數(shù)內(nèi)的執(zhí)行只應該屬于函數(shù)內(nèi)的變化,但是實際打印結(jié)果是[2,3],函數(shù)把外面變量的1刪掉了 這不是我想要的,我只想要變量在函數(shù)里處理成我想要的,

    2024年02月12日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包