日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python函数参数传递:传值还是传引用

發布時間:2023/12/2 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python函数参数传递:传值还是传引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引子

首先來看一個列子:

def change(val):val.append(100)val = ['T', 'Z', 'Y'] nums = [0, 1] change(nums) print(nums)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

猜猜結果應該是什么??
如果Python函數參數的傳遞是傳值的話,結果應該是[0, 1],如果是傳引用的話,結果應該是[‘T’, ‘Z’, ‘Y’]。?
可是實際結果是:[0, 1, 100]。所以,Python函數參數的傳遞既不是傳值也不是傳引用。

Python函數參數傳遞

那么Python中函數參數到底是以什么形式傳遞的呢??
我們首先明確一些概念:Python中的變量對象。?
Python中的變量是沒有類型的,我們可以把它看做一個(*void)類型的指針,變量是可以指向任何對象的,而對象才是有類型的。?
而且Python中的對象有可變對象(number,string,tuple等)和不可變對象之分(list,dict等)。?
比如下面的例子:

nums = (1, 2, 3) type(nums) #輸出:tuple id(nums) #輸出:59179256 nums = [1, 2, 3] type(nums) #輸出:list id(nums) #輸出:59094960
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到nums是沒有類型的,它可以指向一個tuple也可以指向一個list,從id就可以看出nums指向了不同的對象。?
明白了這個概念,那么我們可以說Python中函數參數的傳遞是傳遞的變量的值。?
而且我們有下面的規律:?
1. 不可變對象作為函數參數,相當于C系語言的值傳遞。?
2. 可變對象作為函數參數,相當于C系語言的引用傳遞。

例子分析

下面我們分析幾個例子:?
1. 不可變對象

def change(val):val = 0 num = 1 change(num) print(num) #輸出結果為1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

按照上面的規律1,輸出結果為1。我們分析一下為什么。?
?
我們定義了一個變量num,num指向數字1,然后執行change函數的時候,復制了num變量到val,即剛進入函數體的時候val仍然指向數字1,然后函數體中給val賦值2,因為數字是不可變對象,所以val重新指向了0。但是作為num變量,仍然指向1。?
2. 可變對象

def change(val):val.append(1) nums = [0] change(nums) print(nums)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5


這里例子同樣的道理,剛進入change函數體的時候,val指向列表[0],因為列表是可變對象,所以給[0]執行append操作的時候,直接作用在原來的list上不會生成新的對象,所以返回結果是[0, 1]。?
3. 引子中的例子?

開始的時候,nums指向列表[0],然后進入函數體change的時候,val指向列表[0],然后執行append,列表[0]變成[0, 1],然后又將[‘T’, ‘Z’, ‘Y’]賦值給val,所以最后的結果是nums指向的[0]變成了[0, 1]。

所以最重要的一點是明白:Python中函數參數的傳遞是傳遞的變量的值;Python中變量和對象的不同。

總結

以上是生活随笔為你收集整理的Python函数参数传递:传值还是传引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。