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

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

python淺拷貝和深拷貝的區(qū)別-創(chuàng)新互聯(lián)

這篇文章主要講解了“python淺拷貝和深拷貝的區(qū)別”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python淺拷貝和深拷貝的區(qū)別”吧!

下花園ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

一.普通的變量賦值

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

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ī)的變量賦值共享一個內(nèi)存塊,內(nèi)存地址相同,一旦值發(fā)生改變,共享同一個內(nèi)存地址的所有變量值都會發(fā)生改變,可以直接通過內(nèi)置函數(shù)id()對比下內(nèi)存地址即可!

python淺拷貝和深拷貝的區(qū)別

二.淺拷貝和深拷貝

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

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

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

python淺拷貝和深拷貝的區(qū)別

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(個人博客地址): shuopython.com

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

@Github:www.github.com

 

@File:python_copy.py

@Time:2019/10/27:25

 

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

"""

 

import copy

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

import copy

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ū)別

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

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

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

示例代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import copy

 

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']

http://weahome.cn/article/dohhss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部