最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python參數(shù)的傳遞幾種情況實(shí)例詳解

 更新時(shí)間:2023年09月04日 10:49:21   作者:菜鳥之編程  
這篇文章主要給大家介紹了關(guān)于Python參數(shù)的傳遞的相關(guān)資料,在Python中傳遞參數(shù)指的是函數(shù)或方法中的參數(shù)傳輸方式,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

一、參數(shù)的傳遞 

函數(shù)的參數(shù)傳遞本質(zhì)上就是:從實(shí)參到形參的賦值操作。Python中“一切皆對象”,所有的賦值操作都是“引用的賦值”。所以,Python中參數(shù)的傳遞都是“引用傳遞”,不是“值傳遞”。

具體操作時(shí)分為兩類:

對“可變對象”進(jìn)行“寫操作”,直接作用于原對象本身。對“不可變對象”進(jìn)行“寫操作”,會產(chǎn)生一個(gè)新的“對象空間”,并用新的值填充這塊空間。

可變對象有:

字典、列表、集合、自定義的對象等

不可變對象有:

數(shù)字、字符串、元組、function等

二、傳遞可變對象的引用

傳遞參數(shù)是可變對象(例如:列表、字典、自定義的其他可變對象等),實(shí)際傳遞的還是對象的引用。在函數(shù)體中不創(chuàng)建新的對象拷貝,而是可以直接修改所傳遞的對象。

【操作】參數(shù)傳遞:傳遞可變對象的引用

b = [10,20]
def f2(m):
  print("m:",id(m))    #b和m是同一個(gè)對象
  m.append(30)  #由于m是可變對象,不創(chuàng)建對象拷貝,直接修改這個(gè)對象
?
f2(b)
print("b:",id(b))
print(b)

執(zhí)行結(jié)果:

m: 45765960

b: 45765960

[10, 20, 30]

三、傳遞不可變對象的引用

傳遞參數(shù)是不可變對象(例如: int 、 float 、字符串、元組、布爾值),實(shí)際傳遞的還是對象的引用。在”賦值操作”時(shí),由于不可變對象無法修改,系統(tǒng)會新創(chuàng)建一個(gè)對象。

【操作】參數(shù)傳遞:傳遞不可變對象的引用

a = 100
def f1(n):
  print("n:",id(n))    #傳遞進(jìn)來的是a對象的地址
  n = n+200      #由于a是不可變對象,因此創(chuàng)建新的對象n
  print("n:",id(n))  #n已經(jīng)變成了新的對象
  print(n)
f1(a)
print("a:",id(a))

執(zhí)行結(jié)果:

n: 1663816464

n: 46608592

300

a: 1663816464

顯然,通過 id 值我們可以看到 n a 一開始是同一個(gè)對象。給n賦值后,n是新的對象。

四、淺拷貝和深拷貝

為了更深入的了解參數(shù)傳遞的底層原理,我們需要講解一下“淺拷貝和深拷貝”。我們可以使用內(nèi)置函數(shù): copy (淺拷貝)、 deepcopy (深拷貝)。

  • 淺拷貝:拷貝對象,但不拷貝子對象的內(nèi)容,只是拷貝子對象的引用。
  • 深拷貝:拷貝對象,并且會連子對象的內(nèi)存也全部(遞歸)拷貝一份,對子對象的修改不會影響源對象
#測試淺拷貝和深拷貝
import copy
?
def testCopy():
  '''測試淺拷貝'''
  a = [10, 20, [5, 6]]
  b = copy.copy(a)
?
  print("a", a)
  print("b", b)
  b.append(30)
  b[2].append(7)
  print("淺拷貝......")
  print("a", a)
  print("b", b)
?
def testDeepCopy():
  '''測試深拷貝'''
  a = [10, 20, [5, 6]]
  b = copy.deepcopy(a)
?
  print("a", a)
  print("b", b)
  b.append(30)
  b[2].append(7)
  print("深拷貝......")
  print("a", a)
  print("b", b)
?
testCopy()
print("*************")
testDeepCopy()

運(yùn)行結(jié)果:

a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

淺拷貝......

a [10, 20, [5, 6, 7]]

b [10, 20, [5, 6, 7], 30]

a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

深拷貝......

a [10, 20, [5, 6]]

b [10, 20, [5, 6, 7], 30]

五、傳遞不可變對象包含的子對象是可變的情況

#傳遞不可變對象時(shí)。不可變對象里面包含的子對象是可變的。則方法內(nèi)修改了這個(gè)可變對象,源對象也發(fā)生了變化。
?
a = (10,20,[5,6])
print("a:",id(a))
?
def test01(m):
  print("m:",id(m))
  m[2][0] = 888
  print(m)
  print("m:",id(m))
?
test01(a)
print(a)

運(yùn)行結(jié)果:

a: 41611632

m: 41611632

(10, 20, [888, 6])

m: 41611632

(10, 20, [888, 6])

總結(jié) 

到此這篇關(guān)于Python參數(shù)的傳遞幾種情況的文章就介紹到這了,更多相關(guān)Python參數(shù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談python中的多態(tài)

    淺談python中的多態(tài)

    在面向?qū)ο蟪绦蛟O(shè)計(jì)中,除了封裝和繼承特性外,多態(tài)也是一個(gè)非常重要的特性。讓具有不同功能的函數(shù)可以使用相同的函數(shù)名,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容(功能)的函數(shù)
    2021-06-06
  • python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼

    python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼

    這篇文章主要介紹了python統(tǒng)計(jì)mysql數(shù)據(jù)量變化并調(diào)用接口告警的示例代碼,幫助大家更好的利用python操作數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • 基于Python打造一個(gè)PDF全能處理工具

    基于Python打造一個(gè)PDF全能處理工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python構(gòu)建一個(gè)PDF處理工具箱,涵蓋拆分,合并,加密,水印四大核心功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-07-07
  • python三大神器之fabric使用教程

    python三大神器之fabric使用教程

    fabric 是一個(gè)python包 是一個(gè)基于ssh的部署工具包,這篇文章主要介紹了python三大神器之fabric,需要的朋友可以參考下
    2019-06-06
  • python實(shí)現(xiàn)祝福彈窗效果

    python實(shí)現(xiàn)祝福彈窗效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)祝福彈窗效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python探索之自定義實(shí)現(xiàn)線程池

    Python探索之自定義實(shí)現(xiàn)線程池

    這篇文章主要介紹了Python探索之自定義實(shí)現(xiàn)線程池,使用queue實(shí)現(xiàn)線程池的方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • PyQt6/PySide6中QTableView類的實(shí)現(xiàn)

    PyQt6/PySide6中QTableView類的實(shí)現(xiàn)

    本文主要介紹了PyQt6/PySide6中QTableView類的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Python利用Lambda表達(dá)式高效處理列表

    Python利用Lambda表達(dá)式高效處理列表

    這篇文章主要為大家詳細(xì)介紹了Python如何利用Lambda表達(dá)式高效處理列表,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-12-12
  • python高級之元類的用法總結(jié)

    python高級之元類的用法總結(jié)

    元類是Python中最高級別的編程概念之一,用于創(chuàng)建類的類,雖然元類在日常Python編程中并不常見,但它們提供了無限的可能性來改變類的行為,從而使元編程成為可能,這篇文章主要給大家介紹了關(guān)于python高級之元類的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Python整數(shù)對象實(shí)現(xiàn)原理詳解

    Python整數(shù)對象實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Python整數(shù)對象實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評論

华蓥市| 汝南县| 大余县| 拜城县| 温宿县| 马龙县| 五峰| 陆良县| 噶尔县| 彰武县| 四子王旗| 五峰| 锦州市| 衡阳市| 班戈县| 江达县| 额济纳旗| 柞水县| 灯塔市| 五华县| 应用必备| 金溪县| 平利县| 阿尔山市| 平远县| 商洛市| 望都县| 南皮县| 余姚市| 香河县| 杭锦旗| 江源县| 监利县| 阿克| 曲阜市| 班玛县| 长丰县| 景谷| 兰考县| 遵义市| 清徐县|