python賦值是拷貝還是引用-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為鳳岡等服務(wù)建站,鳳岡等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為鳳岡企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

本篇文章給大家分享的是有關(guān)python賦值是拷貝還是引用,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

變量。對象和引用

python中的這些概念和C++中的有很大的不同。有些概念需要我們理解:

1、python中的變量沒有類型信息,類型的概念存在于對象中而不是變量中。變量是通用的,它只是引用了一個特定的對象。這和C++中的void指針有點相似的味道。

2、類型屬于對象,并且對象中包含了一個引用計數(shù)器,用于記錄當(dāng)前有多少個變量在引用這個對象。一旦引用計數(shù)器為0,那么該對象就會被系統(tǒng)自動回收(這里有例外,python中緩存了一些小的常用的對象)。

3、對象有可變對象和不可變對象之分??勺儗ο罂梢员恍薷?,有列表list、字典dict。不可變對象無法修改,有數(shù)字、字符串str,元組tuple。

#不可變對象的例子
name="bill"
name+="Bob"

第一句創(chuàng)建一個字符串對象,并讓變量name引用該對象。按照C++中的理解,第二句試圖修改name這個字符串。但是在python中,其實新建了一個值為”billBob”的字符串對象,并讓name引用該對象。原來的值為”bill”的字符串對象引用計數(shù)變?yōu)?,被垃圾回收系統(tǒng)回收。這里的可變與不可變指的是頂層對象不可變

list1=[1,2,3,4]
tuple1=(1,list1)

上面的例子中,雖然tuple1是一個元組對象(不可變),但是tuple1[1]是一個list對象的引用,這個對象是可變的。
4、C++中使用=默認創(chuàng)建對象,而python中使用=默認創(chuàng)建引用!

numList=[1,2,3,4]
#numList2和numList引用同一個列表對象
#修改這個列表對象對這兩個變量都有影響
numList2=numList

再次強調(diào)!賦值操作總是儲存對象的引用?。。∵@一點和C++中完全不同。

list1=[1,2,3,4]
list2=['hello',list1]
dict1={'list1':list1}

像上面這種情況,list1、list2[1]和dict1[‘list1’]都是同一個list對象的引用,并且由于list對象是可變對象,通過上面三個變量中的任意一個變量修改該list對象都會影響到其余的變量。

如何我們確實想要復(fù)制對象而不是儲存引用,有以下幾種辦法:1、使用切片表達式;2、使用對象的copy方法(list\dict);3、通過顯示地構(gòu)造新的對象,例如 list(iterable);4、copy標準庫中的copy()或deepcopy();

注意:只有deepcopy是深拷貝,其余沒有顯示說明的全都是淺拷貝!

以上就是python賦值是拷貝還是引用,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

文章題目:python賦值是拷貝還是引用-創(chuàng)新互聯(lián)
標題URL:http://muchs.cn/article2/cdisoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、全網(wǎng)營銷推廣、定制開發(fā)、網(wǎng)站收錄、網(wǎng)站設(shè)計公司、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)