python中的可變引數和不可變引數

2022-07-29 09:45:10 字數 1330 閱讀 6063

知識點:python中,萬物皆物件。

python中不存在所謂的傳值呼叫,一切傳遞的都是物件的引用,也可以認為是傳址。

python在heap中分配的物件分成兩類:可變物件和不可變物件。所謂可變物件是指,物件的內容可變,而不可變物件是指物件內容不可變。

不可變(immutable):int、字串(string)、float、(數值型number)、元組(tuple)

可變(mutable):字典型(dictionary)、列表型(list)

不可變型別特點:

看下面的例子(例1)

從上圖可知,不可變物件的特徵沒有變,變的只是建立了新物件,改變了變數的物件引用。

看乙個例子(例2)

>>>x = 1

>>>y = 1

>>>x = 1

>>> x is y

true

>>>y is z

true

如上所示,因為整數為不可變,x,y,z在記憶體中均指向乙個值為1的記憶體位址,也就是說,x,y,z均指向的是同乙個位址,值得注意的是,整形來說,目前僅支援(-1,100)。

總結一下,不可變物件的優缺點。

優點是,這樣可以減少重複的值對記憶體空間的占用

缺點呢,如例1所示,我要修改這個變數繫結的值,如果記憶體中沒用存在該值的記憶體塊,那麼必須重新開闢一塊記憶體,把新位址與變數名繫結。而不是修改變數原來指向的記憶體塊的值,這回給執行效率帶來一定的降低。

下面看乙個可變物件的例子(例3)

python函式引數對於可變物件,函式內對引數的改變會影響到原始物件;對於不可變物件,函式內對引數的改變不會影響到原始引數。原因在於:

1、可變物件,引數改變的是可變物件,其內容可以被修改。

2、不可變物件,改變的是函式內變數的指向物件。

比如存在2個列表 a 和 b

如果a=b的話, a和b的位址是相同的;如果只是想拷貝,那麼就得用 a=b[:]

python基礎 引數傳遞問題和可變不可變型別

在python中,函式的引數傳遞是 值傳遞 還是 引用傳遞 加引號是因為python中關於引數傳遞不這麼講,但個人覺得可以這麼去理解 要看傳入引數是可變還是不可變物件,當傳入可變物件時即為 引用傳遞 傳入的為不可變物件則是 值傳遞 如下 x 1,2,3 可變引數 print x x 1,2,3 de...

Python 函式高階之不可變和可變引數

1 函式高階 不可變和可變引數 2 3 可變型別引數 列表 list,字典 dict 4 5 問題1 在函式內部,針對引數使用賦值語句,會不會影響呼叫函式時傳遞的 實參變數?6 7 不會!無論實參是可變型別還是不可變型別,8只要針對引數使用賦值語句,會在函式內部 修改區域性變數的引用,9不會影響到 ...

python中的可變物件和不可變物件

知識點 python中,萬物皆物件。知識點 python中,萬物皆物件。python中不存在所謂的傳值呼叫,一切傳遞的都是物件的引用,也可以認為是傳址。python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容可變,而不可變物件是指物件內容不可變。不可變 immu...