真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python的淺拷貝與深拷貝有什么區(qū)別

本文以python的數(shù)據(jù)拷貝為例,為大家分析淺拷貝與深拷貝的區(qū)別,閱讀完整文相信大家對(duì)python的淺拷貝與深拷貝有了一定的認(rèn)識(shí)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、金寨網(wǎng)站維護(hù)、網(wǎng)站推廣。

一.普通的變量賦值

我們平常使用的變量賦值就是淺拷貝,即兩個(gè)變量共享同一個(gè)內(nèi)存塊,相同的內(nèi)存地址,一旦值發(fā)生改變,另外一個(gè)變量的值也會(huì)跟隨著一起變化,演示代碼如下:

1

2

3

4

5

6

7

8

9

10

list1=[1,2,3,4,5]

# 普遍的變量賦值

list2=list1

print(id(list1))

print(id(list2))

 

# 修改列表list2的數(shù)據(jù)

list2.append(123)

print(list1)

print(list2)

輸出結(jié)果:

1

2

3

4

2251297055368

2251297055368

[1,2,3,4,5,123]

[1,2,3,4,5,123]

注意:常規(guī)的變量賦值共享一個(gè)內(nèi)存塊,內(nèi)存地址相同,一旦值發(fā)生改變,共享同一個(gè)內(nèi)存地址的所有變量值都會(huì)發(fā)生改變,可以直接通過內(nèi)置函數(shù)id()對(duì)比下內(nèi)存地址即可!

  

二.淺拷貝和深拷貝

在python開發(fā)過程中,有些時(shí)候?qū)τ谏厦娴那闆r并不是我們想要的,我們更加希望對(duì)賦值后的變量做修改并不影響原始變量的值,如何實(shí)現(xiàn)呢?這里就需要介紹一下copy模塊:

copy.copy() – 淺拷貝,重新分配內(nèi)存,只拷貝父對(duì)象,不會(huì)拷貝對(duì)象的內(nèi)部的子對(duì)象;

copy.deepcopy() – 深拷貝,重新分配內(nèi)存,拷貝對(duì)象及其所有子對(duì)象;

1.淺拷貝copy()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(個(gè)人博客地址): shuopython.com

@WeChat Official Account(微信公眾號(hào)):猿說python

@Github:www.github.com

 

@File:python_copy.py

@Time:2019/10/27:25

 

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

"""

 

importcopy

spam=['A','B','C','D']

# 使用淺拷貝

cheese=copy.copy(spam)

cheese[1]=42

print(id(spam),spam)

print(id(cheese),cheese)

輸出結(jié)果:

1

2

57205555['A','B','C','D']

57208888['A',42,'C','D']

 

2.深拷貝deepcopy()

1

2

3

4

5

6

7

importcopy

spam=['A','B','C','D']

# 使用深拷貝

cheese=copy.deepcopy(spam)

cheese[1]=42

print(id(spam),spam)

print(id(cheese),cheese)

輸出結(jié)果:

1

2

57205555['A','B','C','D']

57208888['A',42,'C','D']

 

3.淺拷貝和深拷貝區(qū)別

對(duì)于常規(guī)的字典或者列表使用copy模塊的深拷貝或者淺拷貝,兩者并沒有區(qū)別!如果字典或者列表中還有包含有子類的話,使用copy模塊的深拷貝和淺拷貝的話,結(jié)果就大不相同了:

copy.copy() — 重新分配內(nèi)存,只拷貝父對(duì)象,不會(huì)拷貝對(duì)象內(nèi)部的子對(duì)象;

copy.deepcopy() — 重新分配內(nèi)存,拷貝對(duì)象及其所有子對(duì)象;

示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

importcopy

 

print("使用淺拷貝:")

spam=[['A','E'],'B','C','D']

# 使用淺拷貝

cheese=copy.copy(spam)

cheese[0][0]=42

print(id(spam),spam)

print(id(cheese),cheese)

print("***"*20)

 

print("使用深拷貝:")

spam=[['A','E'],'B','C','D']

# 使用深拷貝

cheese=copy.deepcopy(spam)

cheese[0][0]=42

print(id(spam),spam)

print(id(cheese),cheese)

輸出結(jié)果:

1

2

3

4

5

6

7

使用淺拷貝:

2179653046408[[42,'E'],'B','C','D']

2179653046920[[42,'E'],'B','C','D']

************************************************************

使用深拷貝:

2179653086728[['A','E'],'B','C','D']

2179653046408[[42,'E'],'B','C','D']

以上就是python的淺拷貝與深拷貝的區(qū)別,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!


網(wǎng)頁標(biāo)題:python的淺拷貝與深拷貝有什么區(qū)別
標(biāo)題路徑:http://weahome.cn/article/geoggo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部