亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的淺拷貝與深拷貝有什么區別

發布時間:2020-06-04 11:21:32 來源:億速云 閱讀:781 作者:Leah 欄目:編程語言

本文以python的數據拷貝為例,為大家分析淺拷貝與深拷貝的區別,閱讀完整文相信大家對python的淺拷貝與深拷貝有了一定的認識。

一.普通的變量賦值

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

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的數據

list2.append(123)

print(list1)

print(list2)


輸出結果:


1

2

3

4

2251297055368

2251297055368

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

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

注意:常規的變量賦值共享一個內存塊,內存地址相同,一旦值發生改變,共享同一個內存地址的所有變量值都會發生改變,可以直接通過內置函數id()對比下內存地址即可!

  

二.淺拷貝和深拷貝

在python開發過程中,有些時候對于上面的情況并不是我們想要的,我們更加希望對賦值后的變量做修改并不影響原始變量的值,如何實現呢?這里就需要介紹一下copy模塊:

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

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

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)


輸出結果:

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)

輸出結果:

1

2

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

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

 

3.淺拷貝和深拷貝區別

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

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

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

示例代碼如下:

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)

輸出結果:


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的淺拷貝與深拷貝的區別,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大洼县| 阳高县| 肥西县| 搜索| 若尔盖县| 赤壁市| 博野县| 岢岚县| 清远市| 宜都市| 突泉县| 富川| 德格县| 开化县| 连城县| 长顺县| 瓮安县| 黑河市| 河西区| 宜黄县| 辛集市| 聂拉木县| 巴南区| 营口市| 綦江县| 阿图什市| 镇原县| 石家庄市| 铜梁县| 桐梓县| 西乌珠穆沁旗| 兴海县| 阿克苏市| 凤台县| 杭锦后旗| 南平市| 安化县| 泰和县| 安陆市| 闽清县| 镇宁|