對Python中列表和數(shù)組的賦值,淺拷貝和深拷貝的實例講解
對Python中列表和數(shù)組的賦值,淺拷貝和深拷貝的實例講解
列表賦值:
>>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3]
解釋:[1, 2, 3]被視作一個對象,a,b均為這個對象的引用,因此,改變a[0],b也隨之改變
如果希望b不改變,可以用到切片
>>> b = a[:] >>> a[0] = 0 >>> print b [1, 2, 3]
解釋,切片a[:]會產生一個新的對象,占用一塊新的內存,b指向這個新的內存區(qū)域,因此改變a所指向的對象的值,不會影響b
列表深拷貝和淺拷貝
淺拷貝
>>> import copy >>> a = [1, 2, 3, [5, 6]] >>> b = copy.copy(a) >>> print b [1, 2, 3, [5, 6]] >>> a[3].append('c') >>> print b [1, 2, 3, [5, 6, 'c']]
深拷貝
>>> a = [1, 2, 3, [5, 6]] >>> b = copy.deepcopy(a) >>> a[3].append('c') >>> print b [1, 2, 3, [5, 6]]
拷貝即是開辟一塊新的內存空間,把被拷貝對象中的值復制過去。而淺拷貝并沒有為子對象[5,6]開辟一塊新的內存空間,而僅僅是實現(xiàn)對a中[5,6]的引用。所以改變a中[5,6]的值,b中的值也會發(fā)生變化。
深拷貝則是為子對象也開辟了一塊新空間。所以改變a中[5, 6]的值,并不影響b
數(shù)組賦值不能用切片來達到相同的目的
>>> import numpy as np >>> a = np.array([1, 2 ,3]) >>> b = a[:] >>> a[0] = 5 >>> print a, b [5 2 3] [5 2 3]
如上,雖然用切片,但不能達到修改a而不影響b的目的。說明a,b仍然指向同一塊內存。
此時,只能用拷貝
>>> b = a.copy() >>> a[0] = 5 >>> print a, b [5 2 3] [1 2 3]
此時修改a不會影響到b。其中的原因以后進一步深究。
注意,列表的拷貝是copy.copy(obj)或copy.deepcopy(obj),數(shù)組的拷貝是obj.copy()
以上這篇對Python中列表和數(shù)組的賦值,淺拷貝和深拷貝的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python利用pandas進行數(shù)據(jù)合并詳解
當使用Python中的pandas庫時,merge函數(shù)是用于合并(或連接)兩個數(shù)據(jù)框(DataFrame)的重要工具。它類似于SQL中的JOIN操作,下面我們就來看看它的具體操作吧2023-11-11Python利用PIL實現(xiàn)多張圖片合成gif動畫的案例詳解
這篇文章主要介紹了Python利用PIL實現(xiàn)多張圖片合成gif動畫的案例,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,感興趣的小伙伴可以自己動手試一下2023-11-11Django2.1.7 查詢數(shù)據(jù)返回json格式的實現(xiàn)
這篇文章主要介紹了Django2.1.7 查詢數(shù)據(jù)返回json格式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12