Python入門知識有哪些 賦值與拷貝有什麼差異

Python 千鋒鄭州 2019-06-28

Python入門知識有哪些?賦值與拷貝有什麼差異?Python入門簡單,對初學者非常友好,但仍然有很多同學表示學習有難度,比如常常搞不清楚賦值和拷貝。下面就給大家講解一下賦值與拷貝的知識。

對於Python而言,Python的一切變量都是對象,變量的存儲採用了引用語義的方式,存儲的只是一個變量的值所在的內存地址,而不是這個變量的只本身。


Python入門知識有哪些 賦值與拷貝有什麼差異


賦值

Python中一切皆為對象,對象通過變量名進行引用,這裡的變量名類似給對象貼標籤,變量的賦值類似給對象貼標籤,變量名就是對象的標籤名。賦值操作(包括對象作為參數、返回值)不會開闢新的內存空間,它只是複製了新對象的引用。

Python對象依據賦值後內存地址是否可修改,分為可變類型與不可變類型。不可變類型包括數字、字符串、元組,可變類型包括列表、字典等等。對於不可變類型只要值相同,不同名稱變量的地址就相同。對於可變類型雖然值相同,不同名稱變量內存的地址不同。

拷貝

Python中的拷貝分為淺拷貝與深拷貝,功能由copy模塊提供。所謂淺拷貝是隻拷貝地址,不拷貝地址指向的內容,原地址修改了,拷貝地址也跟著變化。深拷貝是重新開闢內存空間,然後把拷貝的值保存在內存空間。

對於不可變類型,淺拷貝與深拷貝沒有區別,它們對應的都是相同內存的地址以及相同的對象值,只是貼不同的變量標籤。對於可變類型,淺拷貝是開闢內存空間保存最外層的引用地址,深拷貝是開闢內存空間保存值。

Python中,對象的賦值、拷貝(深/淺拷貝)之間是有差異的,如果使用的時候不注意,就可能產生意外的結果。在進行實際操作時,你需要注意一下幾點:

1、使用copy.copy(),可以進行對象的淺拷貝,它複製了對象,但對於對象中的元素,依然使用原始的引用;

2、如果需要複製一個容器對象以及它裡面的所有元素(包含元素的子元素),可以使用copy.deepcopy()進行深拷貝;

3、對於非容器類型(如數字、字符串、和其他’原子’類型的對象)沒有被拷貝一說,

如果元祖變量只包含原子類型對象,則不能深拷貝。

如果你想學好Python開發,可以選擇專業的學習。不僅能大大縮短學員自行摸索和自我積累的時間,而且能幫助學員在更高的起點上超越,從而在“前人”的肩膀上未雨綢繆,少走彎路。

相關推薦

推薦中...