成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python面試高頻問題:淺拷貝和深拷貝

開發 后端
在Python可變數據類型(列表,字典,集合)中,把一個可變數據類型的變量賦給另一個變量,這兩個變量引用的是同一個對象,內存地址是一樣的,修改當中的一個變量,另一個變量相應也會被修改。

在python的面試中,淺拷貝和深拷貝是一個比較難的問題,六成人根本沒聽過淺拷貝和深拷貝,三成人僅僅了解二者的基礎概念和簡單的區別。僅僅不到一成人能夠準確說出二者的區別,并可以完成相關代碼demo的編寫!今天讓我們來把這個難點搞定,為面試增加晉級砝碼!這篇文章可能也是全網最通俗易懂的講解淺拷貝和深拷貝的文章了,只要大家跟著文章中的實例進行操練,那么一定會徹底搞懂到底什么是淺拷貝和深拷貝這個技術難點!

變量賦值

在Python可變數據類型(列表,字典,集合)中,把一個可變數據類型的變量賦給另一個變量,這兩個變量引用的是同一個對象,內存地址是一樣的,修改當中的一個變量,另一個變量相應也會被修改。如果想了解python中可變數據類型和不可變數據類型的技術細節請看文章:??Python 面試高頻問題:可變數據類型和不可變數據類型的區別。??

舉一個我前面文章中的例子。

l1=['a','b','c']
l2=l1
print(id(l1))
print(id(l2))
l2.append('d')
print("************")
print(id(l1))
print(l1)
print(id(l2))
print(l2)
輸出:
838366483528
838366483528
************
838366483528
['a', 'b', 'c', 'd']
838366483528
['a', 'b', 'c', 'd']

輸出結果這里就不再多做解釋了, l1 和l2的地址相同,所以彼此間會產生影響。

淺拷貝

拷貝了一個對象的最頂層,只拷貝了對象的"引用"。

舉一個前面文章的例子,list中只有一層,即元素中不包含其他list。

l3=['x','y','z']
l4=list(l3)
print(id(l3))
print(id(l4))
l4.append('a')
print(l3)
print(l4)
輸出
831456302152
831480344136
['x', 'y', 'z']
['x', 'y', 'z', 'a']

從結果可以看到,l3 和l4的地址不同,所以彼此間不會發生影響。

我們再上一個例子,讓l3中的第一個元素是一個list。

l3=[['x','y','z'],'a','b']
l4=list(l3)
print(id(l3))
print(id(l4))
l4.append('c')
print(l3)
print(l4)
結果
533336249416
533337391240
[['x', 'y', 'z'], 'a', 'b']
[['x', 'y', 'z'], 'a', 'b', 'c']

結果完全符合預期,因為第一個元素是list,那么他也是有地址的,我們對其進行打印。

print(id(l3[0]))
print(id(l4[0]))
結果
533336248904
533336248904

我們發現l3[0]和l4[0]的地址居然一樣,再執行如下代碼。

l3[0].append('yy')
print(l3)
print(l4)
結果
[['x', 'y', 'z', 'yy'], 'a', 'b']
[['x', 'y', 'z', 'yy'], 'a', 'b', 'c']

結果符合預期,修改l3[0]的值也影響了l4[0]。那么我們怎么做才能讓l3[0]和l4[0]彼此也不發生影響呢,這就需要引入深拷貝。

深拷貝

深拷貝對對象中的每一層都進行了拷貝,拷貝后的對象與原對象完全獨立,沒有任何關系。要想實現深拷貝需要使用copy 模塊中的deepcopy方法。

import copy
l3=[['x','y','z'],'a','b']
#l4=list(l3) #淺拷貝,使用=copy.copy(l3)也可以實現淺拷貝
l4=copy.deepcopy(l3) #深拷貝
l4.append('c')
print(id(l3[0]))
print(id(l4[0]))
l3[0].append('yy')
print(l3)
print(l4)
輸出
407168435784
407166887304
[['x', 'y', 'z', 'yy'], 'a', 'b']
[['x', 'y', 'z'], 'a', 'b', 'c']

可以看到l3[0]和l4[0],已經完全獨立,彼此沒有影響了。

總結淺拷貝和深拷貝

話不多說,用兩張圖就可以進行簡單解釋:

淺拷貝,如下圖:

Python面試高頻問題:淺拷貝和深拷貝

深拷貝,如下圖:


Python面試高頻問題:淺拷貝和深拷貝

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-07-16 12:33:24

Javascript深拷貝淺拷貝

2017-08-16 13:30:05

Java深拷貝淺拷貝

2019-02-25 08:58:16

Python深拷貝淺拷貝

2021-09-27 11:07:11

深拷貝淺拷貝內存

2020-08-03 08:24:26

原型模式拷貝

2018-09-26 14:37:17

JavaScript前端編程語言

2021-01-08 06:15:09

深拷貝淺拷貝寫時拷貝

2023-05-17 08:42:46

深拷貝Golang

2022-11-07 11:37:27

深拷貝淺拷貝底層

2021-09-10 07:41:06

Python拷貝Python基礎

2023-09-22 12:21:33

Python深拷貝淺拷貝

2009-05-19 17:28:44

深拷貝淺拷貝clone()

2020-10-12 08:35:22

JavaScript

2024-03-15 15:03:23

2024-04-17 09:01:08

Python深拷貝淺拷貝

2018-05-10 14:20:18

前端JavaScript深拷貝

2023-05-17 07:36:00

淺拷貝深拷貝對象

2022-09-30 15:03:09

C語言深拷貝淺拷貝

2023-01-05 18:14:32

淺拷貝深拷貝Python

2024-02-05 22:56:16

C++拷貝開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线国产精品 | 91在线视频免费观看 | 免费在线观看91 | 精品日韩一区二区三区 | 97人人超碰 | 日日夜夜天天久久 | 国产精品久久久久久模特 | 免费观看一区二区三区毛片 | 国产精品久久久久久久久久久免费看 | 国产午夜精品一区二区三区 | 成人亚洲片 | av在线天堂网 | 日本一区二区视频 | 91在线网站 | 久久久久久久国产精品视频 | 国产精品一区久久久 | 99久久电影 | av中文字幕在线观看 | 美女视频一区二区 | 成人黄色电影免费 | 国产日韩91| av天天澡天天爽天天av | 亚洲视频一区在线 | 国产精品一区一区三区 | 免费黄色大片 | 亚洲精品乱码久久久久久按摩 | 操一草 | 亚洲第一av | 岛国毛片在线观看 | 欧洲av一区 | 国产综合网站 | 黄色a视频 | 国产一区二区日韩 | 欧美专区在线 | 一级免费毛片 | www.久久 | 91精品入口蜜桃 | 日韩精品视频在线 | 亚洲精品一区二区三区中文字幕 | 人人澡人人爱 | 女女百合av大片一区二区三区九县 |