對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[:]會產(chǎn)生一個新的對象,占用一塊新的內(nèi)存,b指向這個新的內(nèi)存區(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]]
拷貝即是開辟一塊新的內(nèi)存空間,把被拷貝對象中的值復(fù)制過去。而淺拷貝并沒有為子對象[5,6]開辟一塊新的內(nèi)存空間,而僅僅是實現(xiàn)對a中[5,6]的引用。所以改變a中[5,6]的值,b中的值也會發(fā)生變化。
深拷貝則是為子對象也開辟了一塊新空間。所以改變a中[5, 6]的值,并不影響b
數(shù)組賦值不能用切片來達(dá)到相同的目的
>>> import numpy as np >>> a = np.array([1, 2 ,3]) >>> b = a[:] >>> a[0] = 5 >>> print a, b [5 2 3] [5 2 3]
如上,雖然用切片,但不能達(dá)到修改a而不影響b的目的。說明a,b仍然指向同一塊內(nèi)存。
此時,只能用拷貝
>>> 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ù)組的賦值,淺拷貝和深拷貝的實例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯誤的原因
這篇文章主要介紹了python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯誤的原因分析及解決方法,需要的朋友可以參考下2018-09-09
python和pywin32實現(xiàn)窗口查找、遍歷和點擊的示例代碼
這篇文章主要介紹了python和pywin32實現(xiàn)窗口查找、遍歷和點擊的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
python3 將階乘改成函數(shù)形式進行調(diào)用的操作
這篇文章主要介紹了python3 將階乘改成函數(shù)形式進行調(diào)用的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Windows上使用Python增加或刪除權(quán)限的方法
下面小編就為大家分享一篇Windows上使用Python增加或刪除權(quán)限的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04

