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

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

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

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

變量賦值

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

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

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

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

淺拷貝

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

舉一個前面文章的例子,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']

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

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

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

結(jié)果完全符合預(yù)期,因為第一個元素是list,那么他也是有地址的,我們對其進(jìn)行打印。

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

我們發(fā)現(xiàn)l3[0]和l4[0]的地址居然一樣,再執(zhí)行如下代碼。

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

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

深拷貝

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

import copy
l3=[['x','y','z'],'a','b']
#l4=list(l3) #淺拷貝,使用=copy.copy(l3)也可以實現(xiàn)淺拷貝
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],已經(jīng)完全獨立,彼此沒有影響了。

總結(jié)淺拷貝和深拷貝

話不多說,用兩張圖就可以進(jìn)行簡單解釋:

淺拷貝,如下圖:

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

深拷貝,如下圖:


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

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

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

深拷貝淺拷貝內(nèi)存

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基礎(chǔ)

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++拷貝開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天搞天天搞 | 国产成人一区 | 亚洲成人av| 九九精品在线 | 国产成人精品一区二区三 | 亚洲九色| 精品国产乱码久久久久久影片 | 亚洲成人三区 | 亚洲精品电影在线 | 欧美成人在线影院 | 国产视频黄色 | 久久久高清 | 91精品国产91综合久久蜜臀 | 成人免费日韩 | 日韩av在线免费 | 久久久久国产精品 | 特级毛片爽www免费版 | 91免费在线视频 | 天堂一区二区三区 | av官网在线 | 黄色网址免费在线观看 | 人人人人人爽 | 欧美人妇做爰xxxⅹ性高电影 | 国产精品地址 | 久久成人精品视频 | 免费精品在线视频 | 日韩a| 精品一区二区在线观看 | 亚洲国产精品一区在线观看 | 日日操夜夜操视频 | av影片在线| 日韩午夜 | 黄色网址大全在线观看 | 成人国产网站 | 综合一区二区三区 | 中文字幕免费在线 | 久久久精选| 国产小视频自拍 | 99久久精品国产麻豆演员表 | 亚洲一区二区在线播放 | 成人免费视频久久 |