亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python中的深拷貝和淺拷貝詳解

系統 1907 0

要說清楚Python中的深淺拷貝,需要搞清楚下面一系列概念:
變量-引用-對象(可變對象,不可變對象)-切片-拷貝(淺拷貝,深拷貝)

【變量-對象-引用】

在Python中一切都是對象,比如說:3, 3.14, 'Hello', [1,2,3,4],{'a':1}......

Python中的深拷貝和淺拷貝詳解_第1張圖片

甚至連type其本身都是對象,type對象
Python中變量與C/C++/Java中不同,它是指對象的引用,Python是動態類型,程序運行時候,會根據對象的類型
來確認變量到底是什么類型。

單獨賦值: 比如說:

復制代碼 代碼如下:

>>> a = 3

在運行a=3后,變量a變成了對象3的一個引用。在內部,變量事實上是到對象內存空間的一個指針

Python中的深拷貝和淺拷貝詳解_第2張圖片

因為Python的變量不過是對象的引用,或指向對象的指針,因此在程序中可以經常改變變量引用

復制代碼 代碼如下:

>>> x = 42????? #變量綁定到整型對象
>>> x = 'Hello' #現在又成了字符串
>>> x = [1,2,3] #現在又成了列表

專業表述如下:

變量是一個系統表的元素,擁有指向對象的連接的空間
對象是被分配的一塊內存,存儲其所代表的值
引用是自動形成的從變量到對象的指針
特別注意: 類型屬于對象,不是變量
比如像剛才的a=3, 整數對象3包含了兩重信息
1.值為3
2.一個頭部信息:告訴Pthyon,這是個整數對象[相當于一個指向int的指針]

共享引用: 比如說:

復制代碼 代碼如下:

>>> a = 3
>>> b = a

在運行賦值語句b = a之后,變量a和變量b指向了同一個對象的內存空間.

Python中的深拷貝和淺拷貝詳解_第3張圖片

Python中的深拷貝和淺拷貝詳解_第4張圖片

從上圖可以看到,a和b,其id完全一樣,指向同一個整數對象3,或者說同一塊內存

Python中的深拷貝和淺拷貝詳解_第5張圖片

如果刪掉a后, 不會影響b

Python中的深拷貝和淺拷貝詳解_第6張圖片

拷貝概念的引入就是針對:可變對象的共享引用潛在的副作用而提出的.
【可變對象-不可變對象】
在Python中不可變對象指:一旦創建就不可修改的對象,包括字符串,元祖,數字
在Python中可變對象是指:可以修改的對象,包括:列表、字典
上面說的a,b都是整數,整數是不可變對象,如果是可變對象的話,就是另外一回事了。

復制代碼 代碼如下:

>>> L1 = [2,3,4]????? #L1變量指向的是一個可變對象:列表?
>>> L2 = L1?????????? #將L1值賦給L2后,兩者共享引用同一個列表對象[1,2,3,4]?
>>> L1[0] = 200?????? #因為列表可變,改變L1中第一個元素的值?
>>> L1; L2??????????? #改變后,L1,L2同時改變,因為對象本身值變了?
[200, 3, 4]?
[200, 3, 4]?

如果不想改變列表L2的值,有兩種方法:切片 和 copy模塊
復制代碼 代碼如下:

>>> L1 = [2,3,4]??
>>> L2 = L1?
>>> id(L1);id(L2)???? #共享引用一個可變對象?
45811784L?
45811784L?
>>> L2 = L1[:]??????? #切片操作?
>>> id(L1);id(L2)???? #切片后,對象就不一樣了?
45811784L?
45806920L?
>>> L1[0] = 200?
>>> L1;L2???????????? #L1發生改變,L2沒有變化?
[200, 3, 4]?
[2,?? 3, 4]?

【拷貝】
1. 切片技術應用于所有的序列,包括:列表、字符串、元祖
?? >>>但切片不能應用于字典。對字典只能使用D.copy()方法或D.deepcopy()方法.

Python中的深拷貝和淺拷貝詳解_第7張圖片

2. 深淺拷貝,即可用于序列,也可用于字典

復制代碼 代碼如下:

?? >>> import copy
?? >>> X = copy.copy(Y)????? #淺拷貝:只拷貝頂級的對象,或者說:父級對象
?? >>> X = copy.deepcopy(Y)? #深拷貝:拷貝所有對象,頂級對象及其嵌套對象。或者說:父級對象及其子對象

如果字典只有頂級對象:

Python中的深拷貝和淺拷貝詳解_第8張圖片

如果字典中嵌套對象:

Python中的深拷貝和淺拷貝詳解_第9張圖片

【結論】

深淺拷貝都是對源對象的復制,占用不同的內存空間
如果源對象只有一級目錄的話,源做任何改動,不影響深淺拷貝對象
如果源對象不止一級目錄的話,源做任何改動,都要影響淺拷貝,但不影響深拷貝
序列對象的切片其實是淺拷貝,即只拷貝頂級的對象


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 自拍 欧美 在线 综合 另类 | 久久黄色免费视频 | 真人视频一级毛片 | 亚洲精品国产第一区二区尤物 | 精品久久看 | 日韩视频久久 | 在线视频免费观看a毛片 | 久久精品成人一区二区三区 | 二级毛片免费观看全程 | 五月婷婷免费视频 | 一区二区视频在线播放 | 欧美日韩中文一区二区三区 | 日韩美女一区 | 久久噜噜久久久精品66 | 精品成人免费一区二区在线播放 | 国产成在线人视频免费视频 | 国产日韩精品一区在线不卡 | 免费国产不卡午夜福在线 | 一区二区三区四区国产 | bbw下身丰满18ⅹxxⅹ | 欧美精品久久久亚洲 | 国产区一区 | 精品哟哟国产在线观看 | 久久这里只精品国产99热 | 玖玖色在线 | 一本久道久久综合狠狠爱 | 亚洲精品成人一区二区 | 四虎永久在线精品视频免费观看 | 麻豆首页 | 香蕉网在线播放 | 99热视热频这里只有精品 | 亚洲精品国产经典一区二区 | 超激情碰碰碰啪在线视频 | 国产精品亚洲综合久久 | 日韩a毛片| 114毛片免费观看网站 | 天天综合网天天综合色不卡 | 国产成人亚洲毛片 | 久久高清一区二区三区 | 日韩亚洲人成在线综合 | 欧美一区永久视频免费观看 |