創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
本篇文章給大家分享的是有關python賦值是拷貝還是引用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
變量。對象和引用
python中的這些概念和C++中的有很大的不同。有些概念需要我們理解:
1、python中的變量沒有類型信息,類型的概念存在于對象中而不是變量中。變量是通用的,它只是引用了一個特定的對象。這和C++中的void指針有點相似的味道。
2、類型屬于對象,并且對象中包含了一個引用計數器,用于記錄當前有多少個變量在引用這個對象。一旦引用計數器為0,那么該對象就會被系統自動回收(這里有例外,python中緩存了一些小的常用的對象)。
3、對象有可變對象和不可變對象之分。可變對象可以被修改,有列表list、字典dict。不可變對象無法修改,有數字、字符串str,元組tuple。
#不可變對象的例子 name="bill" name+="Bob"
第一句創建一個字符串對象,并讓變量name引用該對象。按照C++中的理解,第二句試圖修改name這個字符串。但是在python中,其實新建了一個值為”billBob”的字符串對象,并讓name引用該對象。原來的值為”bill”的字符串對象引用計數變為0,被垃圾回收系統回收。這里的可變與不可變指的是頂層對象不可變
list1=[1,2,3,4] tuple1=(1,list1)
上面的例子中,雖然tuple1是一個元組對象(不可變),但是tuple1[1]是一個list對象的引用,這個對象是可變的。
4、C++中使用=默認創建對象,而python中使用=默認創建引用!
numList=[1,2,3,4] #numList2和numList引用同一個列表對象 #修改這個列表對象對這兩個變量都有影響 numList2=numList
再次強調!賦值操作總是儲存對象的引用!!!這一點和C++中完全不同。
list1=[1,2,3,4] list2=['hello',list1] dict1={'list1':list1}
像上面這種情況,list1、list2[1]和dict1[‘list1’]都是同一個list對象的引用,并且由于list對象是可變對象,通過上面三個變量中的任意一個變量修改該list對象都會影響到其余的變量。
如何我們確實想要復制對象而不是儲存引用,有以下幾種辦法:1、使用切片表達式;2、使用對象的copy方法(list\dict);3、通過顯示地構造新的對象,例如 list(iterable);4、copy標準庫中的copy()或deepcopy();
注意:只有deepcopy是深拷貝,其余沒有顯示說明的全都是淺拷貝!
以上就是python賦值是拷貝還是引用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯-成都網站建設公司行業資訊頻道。
文章題目:python賦值是拷貝還是引用-創新互聯
標題URL:http://www.yijiale78.com/article2/cdisoc.html
成都網站建設公司_創新互聯,為您提供虛擬主機、全網營銷推廣、定制開發、網站收錄、網站設計公司、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯