Python3中copy模塊常用功能及其他幾種copy方式比較


1、簡單的共享引用:

python中內置有小整數常量池和字符串常量池,在某個范圍內的相同的數字或字符串分別賦給不同的變量,這些不同的變量都是指向同一塊內存地址,這就是所謂的共享引用,舉幾個簡單的例子:

 
字符串的共享引用
 
數字的共享引用

單純的變量的傳遞其實也是一種共享引用:

 
a,b指向同一個內存地址,任何一方將地址指向的內容做出改變,另外一方會受到影響

2、字典的copy()方法

字典的copy()方法相當於一種深復制,即將原本的字典dic1復制出一個內容一模一樣的字典給另一個字典變量dic2,dic1和dic2的內容完全相同,但內存地址不同,不是共享引用,其中任何一方做出改變,另外一方不受影響,舉個例子: 

3、copy模塊的兩種copy方法:copy.copy()和copy.deepcopy()

首先導入copy模塊,import copy

copy.copy()方法:復制模式跟copy()中參數的類型有關,只能copy最外層(有嵌套時),參數的類型包括可變類型和不可變類型

1、可變類型:當參數是可變類型時,該方法最外層執行的是深度復制,即復制前后的兩個變量地址不同,如果原變量中嵌套有可變類型的元素,那么,內層進行的是淺復制,一方改變,另一方會受影響。(即兩個變量地址不同,但指向同一塊內存區域)

 
 

2、不可變類型:當copy()中的參數是不可變類型時,最外層執行淺復制(即兩個變量地址相同且指向同一塊內存區域),內層也執行淺復制

 

copy.deepcopy():不管參數是否為可變類型,遞歸地執行深度復制,如果變量中嵌套可變或不可變的變量,在復制時不管內層還是外層均執行深度復制(有一種情況除外),即另外開辟一塊內存空間,把原變量所有的內容都復制一份過來,賦給新的變量,兩變量雖然內容相同,但地址不同,且分別指向不同的區域,任意一方內容做出改變,另一方不會受到影響。

參數為可變類型
參數為不可變類型

注意:

在使用copy.deepcopy()方法時,如果參數為不可變類型,且里面嵌套的對象也是不可變類型,則此方法復制的結果為淺復制(即地址相同)。

 
 
   

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM