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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 形参 拷贝_Day124:python中的变量、引用、拷贝

發(fā)布時(shí)間:2025/3/20 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 形参 拷贝_Day124:python中的变量、引用、拷贝 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Python中,變量是沒有類型的,這和以往看到的大部分編輯語言都不一樣。在使用變量的時(shí)候,不需要提前聲明,只需要給這個(gè)變量賦值即可。但是,當(dāng)用變量的時(shí)候,必須要給這個(gè)變量賦值;如果只寫一個(gè)變量,而沒有賦值,那么Python認(rèn)為這個(gè)變量沒有定義。(在python中,對(duì)象賦值實(shí)際上是對(duì)象的引用。當(dāng)創(chuàng)建一個(gè)對(duì)象,然后把它賦給另一個(gè)變量的時(shí)候,python并沒有拷貝這個(gè)對(duì)象,而只是拷貝了這個(gè)對(duì)象的引用)

>>> aTraceback (most recent call last): File '', line 1, in aNameError: name 'a' is not defined>>>

一、可變對(duì)象 & 不可變對(duì)象

在Python中,對(duì)象分為兩種:不可變對(duì)象:不可變對(duì)象包括int,float,long,str,tuple等

可變對(duì)象:可變對(duì)象包括list,set,dict等

需要注意的是:不可變指的是值的不可變。對(duì)于不可變類型的變量,如果要更改變量,則會(huì)創(chuàng)建一個(gè)新值,把變量綁定到新值上,而舊值如果沒有被引用就等待垃圾回收。另外,不可變的類型可以計(jì)算hash值,作為字典的key。可變類型數(shù)據(jù)對(duì)對(duì)象操作的時(shí)候,不需要再在其他地方申請(qǐng)內(nèi)存,只需要在此對(duì)象后面連續(xù)申請(qǐng)(+/-)即可,也就是它的內(nèi)存地址會(huì)保持不變,但區(qū)域會(huì)變長(zhǎng)或者變短。

二、變量無類型,對(duì)象有類型

上面說了,Python中的變量是沒有類型的,但Python其實(shí)是區(qū)分類型的:Python的所有變量其實(shí)都是指向內(nèi)存中的對(duì)象的一個(gè)指針,都是值的引用,而其類型是跟著對(duì)象走的。總結(jié)來說:在Python中,類型是屬于對(duì)象的,而不是變量, 變量和對(duì)象是分離的,對(duì)象是內(nèi)存中儲(chǔ)存數(shù)據(jù)的實(shí)體,變量則是指向?qū)ο蟮闹羔槨T凇禠earning Python》一書中有一個(gè)觀點(diǎn):變量無類型,對(duì)象有類型,大概也是說的這個(gè)意思。對(duì)象VS變量?nfoo =?1?#一個(gè)指向int數(shù)據(jù)類型的nfoo(再次提醒,nfoo沒有類型)? lstFoo = [1]?#一個(gè)指向list類型的lstFoo,這個(gè)list中包含一個(gè)整數(shù)1

下面是一張說明變量的圖:

三、Python函數(shù)參數(shù)到底是按值還是按引用傳遞的

def func_int(a): a += 4def func_list(a_list): a_list[0] = 4t = 0func_int(t)print t# output: 0t_list = [1, 2, 3]func_list(t_list)print t_list# output: [4, 2, 3]

對(duì)于上面的輸出,不少Python初學(xué)者都比較疑惑:第一個(gè)例子看起來像是傳值,而第二個(gè)例子確實(shí)傳引用。其實(shí),解釋這個(gè)問題也非常容易,主要是因?yàn)榭勺儗?duì)象和不可變對(duì)象的原因:對(duì)于可變對(duì)象,對(duì)象的操作不會(huì)重建對(duì)象,而對(duì)于不可變對(duì)象,每一次操作就重建新的對(duì)象。

在函數(shù)參數(shù)傳遞的時(shí)候,Python其實(shí)就是把參數(shù)里傳入的變量對(duì)應(yīng)的對(duì)象的引用依次賦值給對(duì)應(yīng)的函數(shù)內(nèi)部變量。參照上面的例子來說明更容易理解,func_int中的局部變量'a'其實(shí)是全部變量't'所指向?qū)ο蟮牧硪粋€(gè)引用,由于整數(shù)對(duì)象是不可變的,(你想修改不可更改的對(duì)象時(shí),其實(shí)就是開辟了一個(gè)新的存儲(chǔ)空間新的對(duì)象)所以當(dāng)func_int對(duì)變量'a'進(jìn)行修改的時(shí)候,實(shí)際上是將局部變量'a'指向到了整數(shù)對(duì)象'4'。所以很明顯,func_list修改的是一個(gè)可變的對(duì)象,局部變量'a'和全局變量't_list'指向的還是同一個(gè)對(duì)象。

https://www.cnblogs.com/wft1990/p/5806892.html

總結(jié)

以上是生活随笔為你收集整理的python 形参 拷贝_Day124:python中的变量、引用、拷贝的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。