python中的几种copy用法_Python3中copy模块常用功能及其他几种copy方式比较
1、簡(jiǎn)單的共享引用:
python中內(nèi)置有小整數(shù)常量池和字符串常量池,在某個(gè)范圍內(nèi)的相同的數(shù)字或字符串分別賦給不同的變量,這些不同的變量都是指向同一塊內(nèi)存地址,這就是所謂的共享引用,舉幾個(gè)簡(jiǎn)單的例子:
字符串的共享引用
數(shù)字的共享引用
單純的變量的傳遞其實(shí)也是一種共享引用:
a,b指向同一個(gè)內(nèi)存地址,任何一方將地址指向的內(nèi)容做出改變,另外一方會(huì)受到影響
2、字典的copy()方法
字典的copy()方法相當(dāng)于一種深復(fù)制,即將原本的字典dic1復(fù)制出一個(gè)內(nèi)容一模一樣的字典給另一個(gè)字典變量dic2,dic1和dic2的內(nèi)容完全相同,但內(nèi)存地址不同,不是共享引用,其中任何一方做出改變,另外一方不受影響,舉個(gè)例子:
3、copy模塊的兩種copy方法:copy.copy()和copy.deepcopy()
首先導(dǎo)入copy模塊,import copy
copy.copy()方法:復(fù)制模式跟copy()中參數(shù)的類型有關(guān),只能copy最外層(有嵌套時(shí)),參數(shù)的類型包括可變類型和不可變類型
1、可變類型:當(dāng)參數(shù)是可變類型時(shí),該方法最外層執(zhí)行的是深度復(fù)制,即復(fù)制前后的兩個(gè)變量地址不同,如果原變量中嵌套有可變類型的元素,那么,內(nèi)層進(jìn)行的是淺復(fù)制,一方改變,另一方會(huì)受影響。(即兩個(gè)變量地址不同,但指向同一塊內(nèi)存區(qū)域)
2、不可變類型:當(dāng)copy()中的參數(shù)是不可變類型時(shí),最外層執(zhí)行淺復(fù)制(即兩個(gè)變量地址相同且指向同一塊內(nèi)存區(qū)域),內(nèi)層也執(zhí)行淺復(fù)制
copy.deepcopy():不管參數(shù)是否為可變類型,遞歸地執(zhí)行深度復(fù)制,如果變量中嵌套可變或不可變的變量,在復(fù)制時(shí)不管內(nèi)層還是外層均執(zhí)行深度復(fù)制(有一種情況除外),即另外開(kāi)辟一塊內(nèi)存空間,把原變量所有的內(nèi)容都復(fù)制一份過(guò)來(lái),賦給新的變量,兩變量雖然內(nèi)容相同,但地址不同,且分別指向不同的區(qū)域,任意一方內(nèi)容做出改變,另一方不會(huì)受到影響。
參數(shù)為可變類型
參數(shù)為不可變類型
注意:
在使用copy.deepcopy()方法時(shí),如果參數(shù)為不可變類型,且里面嵌套的對(duì)象也是不可變類型,則此方法復(fù)制的結(jié)果為淺復(fù)制(即地址相同)。
總結(jié)
以上是生活随笔為你收集整理的python中的几种copy用法_Python3中copy模块常用功能及其他几种copy方式比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python random.choice
- 下一篇: python最低薪资_最低15K,最高5