最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年06月03日 10:25:17   投稿:junjie  
這篇文章主要介紹了Python中的深拷貝和淺拷貝詳解,本文講解了變量-對(duì)象-引用、可變對(duì)象-不可變對(duì)象、拷貝等內(nèi)容,需要的朋友可以參考下

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

【變量-對(duì)象-引用】

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

甚至連type其本身都是對(duì)象,type對(duì)象
Python中變量與C/C++/Java中不同,它是指對(duì)象的引用,Python是動(dòng)態(tài)類型,程序運(yùn)行時(shí)候,會(huì)根據(jù)對(duì)象的類型
來確認(rèn)變量到底是什么類型。

單獨(dú)賦值: 比如說:

復(fù)制代碼 代碼如下:

>>> a = 3

在運(yùn)行a=3后,變量a變成了對(duì)象3的一個(gè)引用。在內(nèi)部,變量事實(shí)上是到對(duì)象內(nèi)存空間的一個(gè)指針

因?yàn)镻ython的變量不過是對(duì)象的引用,或指向?qū)ο蟮闹羔槪虼嗽诔绦蛑锌梢越?jīng)常改變變量引用

復(fù)制代碼 代碼如下:

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

專業(yè)表述如下:

變量是一個(gè)系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接的空間
對(duì)象是被分配的一塊內(nèi)存,存儲(chǔ)其所代表的值
引用是自動(dòng)形成的從變量到對(duì)象的指針
特別注意: 類型屬于對(duì)象,不是變量
比如像剛才的a=3, 整數(shù)對(duì)象3包含了兩重信息
1.值為3
2.一個(gè)頭部信息:告訴Pthyon,這是個(gè)整數(shù)對(duì)象[相當(dāng)于一個(gè)指向int的指針]

共享引用: 比如說:

復(fù)制代碼 代碼如下:

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

在運(yùn)行賦值語句b = a之后,變量a和變量b指向了同一個(gè)對(duì)象的內(nèi)存空間.

從上圖可以看到,a和b,其id完全一樣,指向同一個(gè)整數(shù)對(duì)象3,或者說同一塊內(nèi)存

如果刪掉a后, 不會(huì)影響b

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

復(fù)制代碼 代碼如下:

>>> L1 = [2,3,4]      #L1變量指向的是一個(gè)可變對(duì)象:列表 
>>> L2 = L1           #將L1值賦給L2后,兩者共享引用同一個(gè)列表對(duì)象[1,2,3,4] 
>>> L1[0] = 200       #因?yàn)榱斜砜勺?,改變L1中第一個(gè)元素的值 
>>> L1; L2            #改變后,L1,L2同時(shí)改變,因?yàn)閷?duì)象本身值變了 
[200, 3, 4] 
[200, 3, 4] 

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

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

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

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

復(fù)制代碼 代碼如下:

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

如果字典只有頂級(jí)對(duì)象:

如果字典中嵌套對(duì)象:

【結(jié)論】

深淺拷貝都是對(duì)源對(duì)象的復(fù)制,占用不同的內(nèi)存空間
如果源對(duì)象只有一級(jí)目錄的話,源做任何改動(dòng),不影響深淺拷貝對(duì)象
如果源對(duì)象不止一級(jí)目錄的話,源做任何改動(dòng),都要影響淺拷貝,但不影響深拷貝
序列對(duì)象的切片其實(shí)是淺拷貝,即只拷貝頂級(jí)的對(duì)象

相關(guān)文章

  • python實(shí)現(xiàn)數(shù)據(jù)圖表

    python實(shí)現(xiàn)數(shù)據(jù)圖表

    plotly是現(xiàn)代平臺(tái)的敏捷商業(yè)智能和數(shù)據(jù)科學(xué)庫,它作為一款開源的繪圖庫,可以應(yīng)用于Python、R、MATLAB、Excel、JavaScript和jupyter等多種語言,主要使用的js進(jìn)行圖形繪制,實(shí)現(xiàn)過程中主要就是調(diào)用plotly的函數(shù)接口,底層實(shí)現(xiàn)完全被隱藏,便于初學(xué)者的掌握。
    2017-07-07
  • nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享

    nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法分享

    今天小編就為大家分享一篇nginx黑名單和django限速,最簡(jiǎn)單的防惡意請(qǐng)求方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python切片作為占位符使用實(shí)例講解

    python切片作為占位符使用實(shí)例講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python切片作為占位符使用實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析

    ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析

    這篇文章主要介紹了ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python看某個(gè)模塊的版本方法

    python看某個(gè)模塊的版本方法

    今天小編就為大家分享一篇python看某個(gè)模塊的版本方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python實(shí)現(xiàn)自定義日志的具體方法

    python實(shí)現(xiàn)自定義日志的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python實(shí)現(xiàn)自定義日志的具體方法,有興趣的朋友們可以學(xué)習(xí)下。
    2021-05-05
  • Python 可變類型和不可變類型及引用過程解析

    Python 可變類型和不可變類型及引用過程解析

    這篇文章主要介紹了Python 可變類型和不可變類型,以及其引用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python函數(shù)中的不定長(zhǎng)參數(shù)相關(guān)知識(shí)總結(jié)

    Python函數(shù)中的不定長(zhǎng)參數(shù)相關(guān)知識(shí)總結(jié)

    今天給大家?guī)淼氖顷P(guān)于Python函數(shù)的相關(guān)知識(shí),文章圍繞著Python不定長(zhǎng)參數(shù)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python中的hashlib模塊解析

    Python中的hashlib模塊解析

    這篇文章主要介紹了Python中的hashlib模塊解析,hashlib是一個(gè)提供字符加密功能的模塊,包含MD5和SHA的加密算法,具體支持md5,sha1, sha224, sha256, sha384, sha512等算法, 該模塊在用戶登錄認(rèn)證方面應(yīng)用廣泛,對(duì)文本加密也很常見,需要的朋友可以參考下
    2023-09-09
  • django-allauth入門學(xué)習(xí)和使用詳解

    django-allauth入門學(xué)習(xí)和使用詳解

    這篇文章主要介紹了django-allauth入門學(xué)習(xí)和使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論

德保县| 中卫市| 扎赉特旗| 新巴尔虎右旗| 安康市| 始兴县| 谢通门县| 株洲县| 蓬安县| 贡山| 白城市| 潞西市| 德州市| 博客| 灌云县| 余姚市| 定西市| 南京市| 鹰潭市| 炎陵县| 获嘉县| 松滋市| 靖西县| 浏阳市| 永安市| 闸北区| 灌南县| 静海县| 隆德县| 永顺县| 枣庄市| 盖州市| 怀来县| 称多县| 上思县| 台州市| 承德市| 遂宁市| 宁安市| 高雄市| 龙口市|