在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中淺拷貝與深拷貝的操作

科技綠洲 ? 來(lái)源:機(jī)器學(xué)習(xí)算法與Python實(shí)戰(zhàn) ? 作者:機(jī)器學(xué)習(xí)算法與 ? 2023-11-02 10:58 ? 次閱讀

【例子】淺拷貝與深拷貝中

list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]
print(list2)  
# [123, 456, 789, 213]
print(list3)  
# [123, 456, 789, 213]
list1.sort()
print(list2)  
# [123, 213, 456, 789] 
**print(list3)  
# [123, 456, 789, 213]**
list1 = [[123, 456], [789, 213]]
list2 = list1
list3 = list1[:]
print(list2)  
# [[123, 456], [789, 213]]
print(list3)  
# [[123, 456], [789, 213]]
list1[0][0]  = 111
print(list2)  
# [[111, 456], [789, 213]]
**print(list3)  
# [[111, 456], [789, 213]]

小朋友,你是否有很多問(wèn)號(hào)?????

為什么同樣是list3 = list1[:]
執(zhí)行l(wèi)ist1.sort() 操作,list3不發(fā)生變化
執(zhí)行l(wèi)ist1[0][0] = 111 操作,list3發(fā)生變化

首先我們先了解到python的拷貝有淺拷貝和深拷貝之分

序號(hào)操作語(yǔ)句拷貝類型
1Y= X直接賦值(淺拷貝)
2Z = X [:]淺拷貝
3P = copy.copPy(X)淺拷貝
4K = copy.deepcopy(X)深拷貝

接下來(lái)我們來(lái)探索一下,這些個(gè)淺拷貝和深拷貝具體細(xì)節(jié)上有什么區(qū)別呢?

看看這個(gè)case

import copy
X = [1,3,5,['我','是','第','二','維','度'],9,11]
Y= X # 直接賦值(淺拷貝)
Z = X [:] # 淺拷貝 
P = copy.copy(X)  # 淺拷貝 
K = copy.deepcopy(X)# 深拷貝 

#現(xiàn)在我們?cè)赬數(shù)組的第三個(gè)值里面添加一個(gè)'哈哈',把里面的是改為不是
X[3].append('哈哈')
X[3][1] = '不是'

#我們打印一下結(jié)果瞧一瞧
print("起始列表X為 : ", X)
print("把X列表賦值給Y為 : ", Y)
print("淺拷貝X列表給Z為 : ", Z)
print("淺拷貝X列表給P為 : ", P)
print("深拷貝X列表給K為 : ", K)

輸出結(jié)果為:

起始列表X為 :  [1, 3, 5, ['我', '不是', '第', '二', '維', '度', '哈哈'], 9, 11]
把X列表賦值給Y為 :  [1, 3, 5, ['我', '不是', '第', '二', '維', '度', '哈哈'], 9, 11]
淺拷貝X列表給Z為 :  [1, 3, 5, ['我', '不是', '第', '二', '維', '度', '哈哈'], 9, 11]
淺拷貝X列表給P為 :  [1, 3, 5, ['我', '不是', '第', '二', '維', '度', '哈哈'], 9, 11]
深拷貝X列表給K為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]

是不是發(fā)現(xiàn)深拷貝與淺拷貝的一點(diǎn)點(diǎn)區(qū)別啦 ^ . ^只有深拷貝不被更改**!!!**


辣么,我現(xiàn)在想要把X列表的第三值 ['我','是','第','二','維','度'] 改為 7,把最后一個(gè)值改為101,看看這些個(gè)淺拷貝和深拷貝又是怎么表現(xiàn)的......

import copy
X = [1,3,5,['我','是','第','二','維','度'],9,11]
Y= X  # 直接賦值(淺拷貝)
Z = X [:] # 淺拷貝 
P = copy.copy(X) # 淺拷貝 
K = copy.deepcopy(X)# 深拷貝

現(xiàn)在我們修改X數(shù)組的第三個(gè)值,把最后一個(gè)值改為101

X[3] = 7
X[-1] = 101

我們打印一下結(jié)果瞧一瞧

print("起始列表X為 : ", X)
print("把X列表賦值給Y為 : ", Y)
print("淺拷貝X列表給Z為 : ", Z)
print("淺拷貝X列表給P為 : ", P)
print("深拷貝X列表給K為 : ", K)

輸出結(jié)果為:

起始列表X為 :  [1, 3, 5, 7, 9, 101]X列表賦值給Y為 :  [1, 3, 5, 7, 9, 101]  
淺拷貝X列表給Z為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]  
淺拷貝X列表給P為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]  
深拷貝X列表給K為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]

咦!?發(fā)現(xiàn)了什么 ~. ~有的淺拷貝背叛了同胞 ! 和深拷貝的表現(xiàn)是一樣的


結(jié)合上面的例子,我們發(fā)現(xiàn),對(duì)二維列表中的第一維數(shù)據(jù)做修改時(shí),使用 = 進(jìn)行賦值,對(duì)X的修改會(huì)影響Y,使用 [:] , copy.copy() , copy.deepcopy() 進(jìn)行賦值,對(duì)X的修改不會(huì)影響新的賦值。

如果是對(duì)二維列表中的第一維數(shù)據(jù)做增加或者刪除操作呢?試一試咯

import copy
X = [1,3,5,['我','是','第','二','維','度'],9,11]
Y= X  # 直接賦值(淺拷貝)
Z = X [:]# 淺拷貝 
P = copy.copy(X) # 淺拷貝 
K = copy.deepcopy(X)# 深拷貝 

#在X數(shù)組最后添加13,刪除第0個(gè)值
X.append(13)
X.remove(1)

#我們打印一下結(jié)果瞧一瞧
print("起始列表X為 : ", X)
print("把X列表賦值給Y為 : ", Y)
print("淺拷貝X列表給Z為 : ", Z)
print("淺拷貝X列表給P為 : ", P)
print("深拷貝X列表給K為 : ", K)

輸出結(jié)果為:

起始列表X為 :  [3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11, 13]  
把X列表賦值給Y為 :  [3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11, 13]  
淺拷貝X列表給Z為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]  
淺拷貝X列表給P為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]  
深拷貝X列表給K為 :  [1, 3, 5, ['我', '是', '第', '二', '維', '度'], 9, 11]

我們發(fā)現(xiàn),對(duì)二維列表中的第一維數(shù)據(jù)做增加或者刪除操作
同樣是只有使用 = 進(jìn)行賦值,對(duì)X的修改會(huì)影響Y
于是乎,我們可以把上面的 修改 擴(kuò)充為 增刪改 (改也就包括了排序sort()操作喲)
即對(duì)二維列表中的第一維數(shù)據(jù)做 增刪改 操作時(shí),blabla......

你以為這就結(jié)束了嗎?

我,第二維數(shù)據(jù)不想被修改,也不想用深拷貝,怎么辦?
別急,append和 [:] 組合服用就能夠達(dá)到深拷貝deepcopy的效果啦 ===>看

X = [['我','幾','維','度'],['我','是','第','二','維','度'],['我','不','說(shuō)']]
Y= X  # 直接賦值(淺拷貝)
Z = X [:] # 淺拷貝 
P = copy.copy(X)  # 淺拷貝 
K = copy.deepcopy(X)  # 深拷貝 
TT = []
for i in X:
    TT.append(i[:]) # 我是騷操作

#修改第二維度信息
X[1].append('哈哈')
X[1][1] = '不是'

#我們打印一下結(jié)果瞧一瞧
print("起始列表X為 : ", X)
print("把X列表賦值給Y為 : ", Y)
print("淺拷貝X列表給Z為 : ", Z)
print("淺拷貝X列表給P為 : ", P)
print("深拷貝X列表給K為 : ", K)
print("騷操作X列表給TT為 : ", TT)

輸出結(jié)果為:

起始列表X為 :  [['我', '幾', '維', '度'], ['我', '不是', '第', '二', '維', '度', '哈哈'], ['我', '不', '說(shuō)']]
把X列表賦值給Y為 :  [['我', '幾', '維', '度'], ['我', '不是', '第', '二', '維', '度', '哈哈'], ['我', '不', '說(shuō)']]
淺拷貝X列表給Z為 :  [['我', '幾', '維', '度'], ['我', '不是', '第', '二', '維', '度', '哈哈'], ['我', '不', '說(shuō)']]
淺拷貝X列表給P為 :  [['我', '幾', '維', '度'], ['我', '不是', '第', '二', '維', '度', '哈哈'], ['我', '不', '說(shuō)']]
深拷貝X列表給K為 :  **[['我', '幾', '維', '度'], ['我', '是', '第', '二', '維', '度'], ['我', '不', '說(shuō)']]
騷操作X列表給TT為 :  **[['我', '幾', '維', '度'], ['我', '是', '第', '二', '維', '度'], ['我',
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4799

    瀏覽量

    84817
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    25979
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    拷貝拷貝的實(shí)現(xiàn)方法概述

    拷貝拷貝的實(shí)現(xiàn)
    發(fā)表于 07-19 13:35

    python深淺拷貝是什么?

    python的直接賦值python拷貝python
    發(fā)表于 11-04 08:33

    請(qǐng)問(wèn)哪位大神可以詳細(xì)介紹JavaScript拷貝拷貝

    JavaScript數(shù)據(jù)類型JavaScript拷貝拷貝
    發(fā)表于 11-05 07:16

    光盤拷貝機(jī)的使用端口

    光盤拷貝機(jī)的使用端口              使用端口指的是:光盤拷貝機(jī)內(nèi)部控制器與刻錄機(jī)相連的接口。目前光盤拷貝
    發(fā)表于 12-30 10:04 ?1001次閱讀

    磁盤拷貝機(jī)的顯示方式/操作方式

    磁盤拷貝機(jī)的顯示方式/操作方式
    發(fā)表于 12-30 10:31 ?752次閱讀

    C#拷貝拷貝區(qū)別解析

     所謂拷貝就是將對(duì)象的所有字段復(fù)制到新的副本對(duì)象拷貝對(duì)于值類型與引用類型的方式有區(qū)別,
    發(fā)表于 11-29 08:32 ?2.6w次閱讀
    C#<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>與<b class='flag-5'>深</b><b class='flag-5'>拷貝</b>區(qū)別解析

    Python如何防止數(shù)據(jù)被修改Python拷貝拷貝的問(wèn)題說(shuō)明

    在平時(shí)工作,經(jīng)常涉及到數(shù)據(jù)的傳遞。在數(shù)據(jù)傳遞使用過(guò)程,可能會(huì)發(fā)生數(shù)據(jù)被修改的問(wèn)題。為了防止數(shù)據(jù)被修改,就需要再傳遞一個(gè)副本,即使副本被修改,也不會(huì)影響原數(shù)據(jù)的使用。為了生成這個(gè)副本,就產(chǎn)生了拷貝——今天就說(shuō)一下
    的頭像 發(fā)表于 03-30 09:54 ?3069次閱讀
    <b class='flag-5'>Python</b>如何防止數(shù)據(jù)被修改<b class='flag-5'>Python</b><b class='flag-5'>中</b>的<b class='flag-5'>深</b><b class='flag-5'>拷貝</b>與<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>的問(wèn)題說(shuō)明

    實(shí)例介紹Python深淺拷貝

    拷貝。今天就說(shuō)一下Python的深淺拷貝問(wèn)題。 一、深淺copy 賦值運(yùn)算 注意:l2 = l1是一個(gè)指向,是賦值,和深淺copy無(wú)關(guān)。
    的頭像 發(fā)表于 12-16 11:34 ?1309次閱讀

    C++之拷貝構(gòu)造函數(shù)的copy及copy

    C++編譯器會(huì)默認(rèn)提供構(gòu)造函數(shù);無(wú)參構(gòu)造函數(shù)用于定義對(duì)象的默認(rèn)初始化狀態(tài);拷貝構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)拷貝對(duì)象的狀態(tài);對(duì)象的拷貝拷貝
    的頭像 發(fā)表于 12-24 15:31 ?763次閱讀

    簡(jiǎn)述Python深淺拷貝(copy)

    就說(shuō)一下Python的深淺拷貝問(wèn)題。 一、深淺copy 賦值運(yùn)算 l1 = [1, 2, 3, [22, 33]]l2 = l1l1.append(666)print(l1) # [1, 2, 3
    的頭像 發(fā)表于 07-29 16:55 ?1589次閱讀
    簡(jiǎn)述<b class='flag-5'>Python</b><b class='flag-5'>中</b>深淺<b class='flag-5'>拷貝</b>(copy)

    C++面向?qū)ο缶幊?b class='flag-5'>中拷貝拷貝

    可能對(duì)于Java程序員來(lái)說(shuō),很少遇到深淺拷貝問(wèn)題,但是對(duì)于C++程序員來(lái)說(shuō)可謂是又愛又恨。。
    的頭像 發(fā)表于 03-30 12:53 ?793次閱讀
    C++面向?qū)ο缶幊?b class='flag-5'>中</b>的<b class='flag-5'>深</b><b class='flag-5'>拷貝</b>和<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>

    C++拷貝拷貝詳解

    當(dāng)類的函數(shù)成員存在指針成員時(shí)會(huì)產(chǎn)生拷貝拷貝和問(wèn)題。
    發(fā)表于 08-21 15:05 ?340次閱讀
    C++<b class='flag-5'>深</b><b class='flag-5'>拷貝</b>和<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>詳解

    什么是拷貝拷貝

    1、創(chuàng)建對(duì)象的5種方式 ①、通過(guò) new 關(guān)鍵字 這是最常用的一種方式,通過(guò) new 關(guān)鍵字調(diào)用類的有參或無(wú)參構(gòu)造方法來(lái)創(chuàng)建對(duì)象。比如 Object obj = new Object(); ②、通過(guò) Class 類的 newInstance() 方法 這種默認(rèn)是調(diào)用類的無(wú)參構(gòu)造方法創(chuàng)建對(duì)象。比如 Person p2 = (Person) Class.forName("com.ys.test.Person").newInstance(); ③、通過(guò) Constructor 類的 newInstance 方法 這和第二種方法類都是通過(guò)反射來(lái)實(shí)現(xiàn)。通過(guò) java.lang.relect.Constructor 類的 newInstance() 方法指定某個(gè)構(gòu)造器來(lái)創(chuàng)建對(duì)象。 Perso
    的頭像 發(fā)表于 10-13 11:29 ?696次閱讀
    什么是<b class='flag-5'>深</b><b class='flag-5'>拷貝</b>和<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>

    什么是零拷貝技術(shù)

    在傳統(tǒng)操作系統(tǒng)的數(shù)據(jù)傳輸過(guò)程,系統(tǒng)內(nèi)部會(huì)在磁盤、內(nèi)存、緩存多次進(jìn)行數(shù)據(jù)拷貝,每次都會(huì)占用CPU的資源,數(shù)據(jù)量小的時(shí)候還好。 隨著數(shù)據(jù)量的增加,CPU的開銷也會(huì)持續(xù)增加,尤其是在機(jī)器
    的頭像 發(fā)表于 11-27 16:20 ?467次閱讀
    什么是零<b class='flag-5'>拷貝</b>技術(shù)

    磁盤拷貝機(jī)會(huì)拷貝刪除的內(nèi)容嗎

    磁盤拷貝機(jī),也稱為硬盤克隆器或磁盤復(fù)制器,是一種用于復(fù)制硬盤驅(qū)動(dòng)器內(nèi)容的設(shè)備。它可以將一個(gè)硬盤上的所有數(shù)據(jù),包括操作系統(tǒng)、程序、文件和設(shè)置,復(fù)制到另一個(gè)硬盤上。這種設(shè)備在數(shù)據(jù)備份、系統(tǒng)遷移、硬盤
    的頭像 發(fā)表于 10-14 15:38 ?507次閱讀
    主站蜘蛛池模板: 欧美性色视频| 色偷偷成人网免费视频男人的天堂| 亚洲综合校园春色| 6080午夜| 亚洲视频一区二区| 李老汉的性生生活1全部| 成人中文字幕一区二区三区 | 天堂资源地址在线| 免费的三及片| 西西人体大胆高清啪啪欧洲| 在线免费视频一区二区| 道区二区三区四区| 色婷婷色丁香| 美女一级a毛片免费观看| 国产美女一级ba大片免色| 亚洲第一永久在线观看| 久久v| 91国内在线| 在线亚洲综合| 国产网站免费观看| 四虎精品影院2022| 日本国产视频| 国产高清色播视频免费看 | 欧美综合国产精品日韩一 | 色资源在线观看| 久久手机免费视频| 在线观看永久免费| 国产重口老太和小伙乱视频| 中文字幕佐山爱一区二区免费| 国产亚洲自在精品久久| 久久99热国产这有精品| 性欧美人与zooz| 美女天天色| 夜夜爱视频| h视频日本| 狠狠色婷婷七月色综合| 色视频在线看| 国产精品久久永久免费| 欧美黄色免费| 日本一区二区三区四区视频| 乱妇伦小说|